<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span id="local-6989586621680807881"><span id="local-6989586621680807882"><span id="local-6989586621680807883"><span id="local-6989586621680807884"><span id="local-6989586621680807885"><span id="local-6989586621680807886"><span id="local-6989586621680807887"><span id="local-6989586621680807888"><span id="local-6989586621680807889"><span id="local-6989586621680807890"><span id="local-6989586621680807891"><span id="local-6989586621680807892"><span id="local-6989586621680807893"><span id="local-6989586621680807894"></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hs-comment">{-
(c) The University of Glasgow 2006
(c) The GRASP/AQUA Project, Glasgow University, 1992-1998

\section{@Vars@: Variables}
-}</span><span>
</span><span id="line-7"></span><span>
</span><span id="line-8"></span><span class="hs-pragma">{-# LANGUAGE CPP, FlexibleContexts, MultiWayIf, FlexibleInstances, DeriveDataTypeable,
             PatternSynonyms, BangPatterns #-}</span><span>
</span><span id="line-10"></span><span class="hs-pragma">{-# OPTIONS_GHC -Wno-incomplete-uni-patterns   #-}</span><span>
</span><span id="line-11"></span><span class="hs-pragma">{-# OPTIONS_GHC -Wno-incomplete-record-updates #-}</span><span>
</span><span id="line-12"></span><span>
</span><span id="line-13"></span><span class="hs-comment">-- |</span><span>
</span><span id="line-14"></span><span class="hs-comment">-- #name_types#</span><span>
</span><span id="line-15"></span><span class="hs-comment">-- GHC uses several kinds of name internally:</span><span>
</span><span id="line-16"></span><span class="hs-comment">--</span><span>
</span><span id="line-17"></span><span class="hs-comment">-- * 'GHC.Types.Name.Occurrence.OccName': see &quot;GHC.Types.Name.Occurrence#name_types&quot;</span><span>
</span><span id="line-18"></span><span class="hs-comment">--</span><span>
</span><span id="line-19"></span><span class="hs-comment">-- * 'GHC.Types.Name.Reader.RdrName': see &quot;GHC.Types.Name.Reader#name_types&quot;</span><span>
</span><span id="line-20"></span><span class="hs-comment">--</span><span>
</span><span id="line-21"></span><span class="hs-comment">-- * 'GHC.Types.Name.Name': see &quot;GHC.Types.Name#name_types&quot;</span><span>
</span><span id="line-22"></span><span class="hs-comment">--</span><span>
</span><span id="line-23"></span><span class="hs-comment">-- * 'GHC.Types.Id.Id': see &quot;GHC.Types.Id#name_types&quot;</span><span>
</span><span id="line-24"></span><span class="hs-comment">--</span><span>
</span><span id="line-25"></span><span class="hs-comment">-- * 'GHC.Types.Var.Var' is a synonym for the 'GHC.Types.Id.Id' type but it may additionally</span><span>
</span><span id="line-26"></span><span class="hs-comment">--   potentially contain type variables, which have a 'GHC.Core.TyCo.Rep.Kind'</span><span>
</span><span id="line-27"></span><span class="hs-comment">--   rather than a 'GHC.Core.TyCo.Rep.Type' and only contain some extra</span><span>
</span><span id="line-28"></span><span class="hs-comment">--   details during typechecking.</span><span>
</span><span id="line-29"></span><span class="hs-comment">--</span><span>
</span><span id="line-30"></span><span class="hs-comment">--   These 'Var' names may either be global or local, see &quot;GHC.Types.Var#globalvslocal&quot;</span><span>
</span><span id="line-31"></span><span class="hs-comment">--</span><span>
</span><span id="line-32"></span><span class="hs-comment">-- #globalvslocal#</span><span>
</span><span id="line-33"></span><span class="hs-comment">-- Global 'Id's and 'Var's are those that are imported or correspond</span><span>
</span><span id="line-34"></span><span class="hs-comment">--    to a data constructor, primitive operation, or record selectors.</span><span>
</span><span id="line-35"></span><span class="hs-comment">-- Local 'Id's and 'Var's are those bound within an expression</span><span>
</span><span id="line-36"></span><span class="hs-comment">--    (e.g. by a lambda) or at the top level of the module being compiled.</span><span>
</span><span id="line-37"></span><span>
</span><span id="line-38"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.Types.Var</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-39"></span><span>        </span><span class="annot"><span class="hs-comment">-- * The main data type and synonyms</span></span><span>
</span><span id="line-40"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier">Var</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#CoVar"><span class="hs-identifier">CoVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier">Id</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#NcId"><span class="hs-identifier">NcId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#DictId"><span class="hs-identifier">DictId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#DFunId"><span class="hs-identifier">DFunId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier">EvVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EqVar"><span class="hs-identifier">EqVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier">EvId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#IpId"><span class="hs-identifier">IpId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#JoinId"><span class="hs-identifier">JoinId</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-41"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier">TyVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier">TcTyVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TypeVar"><span class="hs-identifier">TypeVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#KindVar"><span class="hs-identifier">KindVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TKVar"><span class="hs-identifier">TKVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier">TyCoVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-42"></span><span>
</span><span id="line-43"></span><span>        </span><span class="annot"><span class="hs-comment">-- * In and Out variants</span></span><span>
</span><span id="line-44"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#InVar"><span class="hs-identifier">InVar</span></a></span><span class="hs-special">,</span><span>  </span><span class="annot"><a href="GHC.Types.Var.html#InCoVar"><span class="hs-identifier">InCoVar</span></a></span><span class="hs-special">,</span><span>  </span><span class="annot"><a href="GHC.Types.Var.html#InId"><span class="hs-identifier">InId</span></a></span><span class="hs-special">,</span><span>  </span><span class="annot"><a href="GHC.Types.Var.html#InTyVar"><span class="hs-identifier">InTyVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-45"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#OutVar"><span class="hs-identifier">OutVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#OutCoVar"><span class="hs-identifier">OutCoVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#OutId"><span class="hs-identifier">OutId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#OutTyVar"><span class="hs-identifier">OutTyVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-46"></span><span>
</span><span id="line-47"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Taking 'Var's apart</span></span><span>
</span><span id="line-48"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#varName"><span class="hs-identifier">varName</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#varUnique"><span class="hs-identifier">varUnique</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#varType"><span class="hs-identifier">varType</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-49"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier">varMult</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#varMultMaybe"><span class="hs-identifier">varMultMaybe</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-50"></span><span>
</span><span id="line-51"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Modifying 'Var's</span></span><span>
</span><span id="line-52"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#setVarName"><span class="hs-identifier">setVarName</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setVarUnique"><span class="hs-identifier">setVarUnique</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setVarType"><span class="hs-identifier">setVarType</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-53"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#updateVarType"><span class="hs-identifier">updateVarType</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#updateVarTypeM"><span class="hs-identifier">updateVarTypeM</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-54"></span><span>
</span><span id="line-55"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Constructing, taking apart, modifying 'Id's</span></span><span>
</span><span id="line-56"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#mkGlobalVar"><span class="hs-identifier">mkGlobalVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mkLocalVar"><span class="hs-identifier">mkLocalVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mkExportedLocalVar"><span class="hs-identifier">mkExportedLocalVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mkCoVar"><span class="hs-identifier">mkCoVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-57"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#idInfo"><span class="hs-identifier">idInfo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#idDetails"><span class="hs-identifier">idDetails</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-58"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#lazySetIdInfo"><span class="hs-identifier">lazySetIdInfo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setIdDetails"><span class="hs-identifier">setIdDetails</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#globaliseId"><span class="hs-identifier">globaliseId</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-59"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#setIdExported"><span class="hs-identifier">setIdExported</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setIdNotExported"><span class="hs-identifier">setIdNotExported</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setIdMult"><span class="hs-identifier">setIdMult</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-60"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeButNotMult"><span class="hs-identifier">updateIdTypeButNotMult</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-61"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeAndMult"><span class="hs-identifier">updateIdTypeAndMult</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeAndMultM"><span class="hs-identifier">updateIdTypeAndMultM</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-62"></span><span>
</span><span id="line-63"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Predicates</span></span><span>
</span><span id="line-64"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#isId"><span class="hs-identifier">isId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier">isTyVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isTcTyVar"><span class="hs-identifier">isTcTyVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-65"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#isLocalVar"><span class="hs-identifier">isLocalVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isLocalId"><span class="hs-identifier">isLocalId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isCoVar"><span class="hs-identifier">isCoVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isNonCoVarId"><span class="hs-identifier">isNonCoVarId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isTyCoVar"><span class="hs-identifier">isTyCoVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-66"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#isGlobalId"><span class="hs-identifier">isGlobalId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isExportedId"><span class="hs-identifier">isExportedId</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-67"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#mustHaveLocalBinding"><span class="hs-identifier">mustHaveLocalBinding</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-68"></span><span>
</span><span id="line-69"></span><span>        </span><span class="annot"><span class="hs-comment">-- * ArgFlags</span></span><span>
</span><span id="line-70"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier">ArgFlag</span></a></span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier">Invisible</span></a></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Types.Var.html#Required"><span class="hs-identifier">Required</span></a></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Types.Var.html#Specified"><span class="hs-identifier">Specified</span></a></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Types.Var.html#Inferred"><span class="hs-identifier">Inferred</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-71"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#isVisibleArgFlag"><span class="hs-identifier">isVisibleArgFlag</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#isInvisibleArgFlag"><span class="hs-identifier">isInvisibleArgFlag</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#sameVis"><span class="hs-identifier">sameVis</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-72"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#AnonArgFlag"><span class="hs-identifier">AnonArgFlag</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier">Specificity</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-73"></span><span>
</span><span id="line-74"></span><span>        </span><span class="annot"><span class="hs-comment">-- * TyVar's</span></span><span>
</span><span id="line-75"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier">VarBndr</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVarBinder"><span class="hs-identifier">TyCoVarBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVarBinder"><span class="hs-identifier">TyVarBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#InvisTVBinder"><span class="hs-identifier">InvisTVBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ReqTVBinder"><span class="hs-identifier">ReqTVBinder</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-76"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#binderVar"><span class="hs-identifier">binderVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#binderVars"><span class="hs-identifier">binderVars</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#binderArgFlag"><span class="hs-identifier">binderArgFlag</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#binderType"><span class="hs-identifier">binderType</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-77"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#mkTyCoVarBinder"><span class="hs-identifier">mkTyCoVarBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mkTyCoVarBinders"><span class="hs-identifier">mkTyCoVarBinders</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-78"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#mkTyVarBinder"><span class="hs-identifier">mkTyVarBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mkTyVarBinders"><span class="hs-identifier">mkTyVarBinders</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-79"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#isTyVarBinder"><span class="hs-identifier">isTyVarBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#tyVarSpecToBinder"><span class="hs-identifier">tyVarSpecToBinder</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#tyVarSpecToBinders"><span class="hs-identifier">tyVarSpecToBinders</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-80"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#mapVarBndr"><span class="hs-identifier">mapVarBndr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mapVarBndrs"><span class="hs-identifier">mapVarBndrs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#lookupVarBndr"><span class="hs-identifier">lookupVarBndr</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-81"></span><span>
</span><span id="line-82"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Constructing TyVar's</span></span><span>
</span><span id="line-83"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#mkTyVar"><span class="hs-identifier">mkTyVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#mkTcTyVar"><span class="hs-identifier">mkTcTyVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-84"></span><span>
</span><span id="line-85"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Taking 'TyVar's apart</span></span><span>
</span><span id="line-86"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#tyVarName"><span class="hs-identifier">tyVarName</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier">tyVarKind</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#tcTyVarDetails"><span class="hs-identifier">tcTyVarDetails</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setTcTyVarDetails"><span class="hs-identifier">setTcTyVarDetails</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-87"></span><span>
</span><span id="line-88"></span><span>        </span><span class="annot"><span class="hs-comment">-- ** Modifying 'TyVar's</span></span><span>
</span><span id="line-89"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#setTyVarName"><span class="hs-identifier">setTyVarName</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setTyVarUnique"><span class="hs-identifier">setTyVarUnique</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#setTyVarKind"><span class="hs-identifier">setTyVarKind</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#updateTyVarKind"><span class="hs-identifier">updateTyVarKind</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-90"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#updateTyVarKindM"><span class="hs-identifier">updateTyVarKindM</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-91"></span><span>
</span><span id="line-92"></span><span>        </span><span class="annot"><a href="GHC.Types.Var.html#nonDetCmpVar"><span class="hs-identifier">nonDetCmpVar</span></a></span><span>
</span><span id="line-93"></span><span>
</span><span id="line-94"></span><span>    </span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span class="hs-cpp">

#include &quot;HsVersions.h&quot;
</span><span>
</span><span id="line-98"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-99"></span><span>
</span><span id="line-100"></span><span class="hs-keyword">import</span><span> </span><span class="hs-pragma">{-# SOURCE</span><span> </span><span class="hs-pragma">#-}</span><span>   </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html"><span class="hs-identifier">GHC.Core.TyCo.Rep</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier">Type</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier">Kind</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Mult"><span class="hs-identifier">Mult</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-101"></span><span class="hs-keyword">import</span><span> </span><span class="hs-pragma">{-# SOURCE</span><span> </span><span class="hs-pragma">#-}</span><span>   </span><span class="annot"><a href="GHC.Core.TyCo.Ppr.html"><span class="hs-identifier">GHC.Core.TyCo.Ppr</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Ppr.html#pprKind"><span class="hs-identifier">pprKind</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-102"></span><span class="hs-keyword">import</span><span> </span><span class="hs-pragma">{-# SOURCE</span><span> </span><span class="hs-pragma">#-}</span><span>   </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html"><span class="hs-identifier">GHC.Tc.Utils.TcType</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcTyVarDetails"><span class="hs-identifier">TcTyVarDetails</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#pprTcTyVarDetails"><span class="hs-identifier">pprTcTyVarDetails</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#vanillaSkolemTv"><span class="hs-identifier">vanillaSkolemTv</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-103"></span><span class="hs-keyword">import</span><span> </span><span class="hs-pragma">{-# SOURCE</span><span> </span><span class="hs-pragma">#-}</span><span>   </span><span class="annot"><a href="GHC.Types.Id.Info.html"><span class="hs-identifier">GHC.Types.Id.Info</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier">IdDetails</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier">IdInfo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#coVarDetails"><span class="hs-identifier">coVarDetails</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#isCoVarDetails"><span class="hs-identifier">isCoVarDetails</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-104"></span><span>                                           </span><span class="annot"><a href="GHC.Types.Id.Info.html#vanillaIdInfo"><span class="hs-identifier">vanillaIdInfo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#pprIdDetails"><span class="hs-identifier">pprIdDetails</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-105"></span><span class="hs-keyword">import</span><span> </span><span class="hs-pragma">{-# SOURCE</span><span> </span><span class="hs-pragma">#-}</span><span>   </span><span class="annot"><a href="GHC.Builtin.Types.html"><span class="hs-identifier">GHC.Builtin.Types</span></a></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Builtin.Types.html#manyDataConTy"><span class="hs-identifier">manyDataConTy</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-106"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Name.html"><span class="hs-identifier">GHC.Types.Name</span></a></span><span> </span><span class="hs-keyword">hiding</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Name.Occurrence.html#varName"><span class="hs-identifier">varName</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-107"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html"><span class="hs-identifier">GHC.Types.Unique</span></a></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Uniquable"><span class="hs-identifier">Uniquable</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier">Unique</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#getKey"><span class="hs-identifier">getKey</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#getUnique"><span class="hs-identifier">getUnique</span></a></span><span>
</span><span id="line-108"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#mkUniqueGrimily"><span class="hs-identifier">mkUniqueGrimily</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#nonDetCmpUnique"><span class="hs-identifier">nonDetCmpUnique</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-109"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Misc.html"><span class="hs-identifier">GHC.Utils.Misc</span></a></span><span>
</span><span id="line-110"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html"><span class="hs-identifier">GHC.Utils.Binary</span></a></span><span>
</span><span id="line-111"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-112"></span><span>
</span><span id="line-113"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.Data.html#"><span class="hs-identifier">Data.Data</span></a></span><span>
</span><span id="line-114"></span><span>
</span><span id="line-115"></span><span class="hs-comment">{-
************************************************************************
*                                                                      *
                     Synonyms
*                                                                      *
************************************************************************
-- These synonyms are here and not in Id because otherwise we need a very
-- large number of SOURCE imports of &quot;GHC.Types.Id&quot; :-(
-}</span><span>
</span><span id="line-124"></span><span>
</span><span id="line-125"></span><span class="hs-comment">-- | Identifier</span><span>
</span><span id="line-126"></span><span class="hs-keyword">type</span><span> </span><span id="Id"><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-var">Id</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>       </span><span class="hs-comment">-- A term-level identifier</span><span>
</span><span id="line-127"></span><span>                       </span><span class="hs-comment">--  predicate: isId</span><span>
</span><span id="line-128"></span><span>
</span><span id="line-129"></span><span class="hs-comment">-- | Coercion Variable</span><span>
</span><span id="line-130"></span><span class="hs-keyword">type</span><span> </span><span id="CoVar"><span class="annot"><a href="GHC.Types.Var.html#CoVar"><span class="hs-identifier hs-var">CoVar</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>        </span><span class="hs-comment">-- See Note [Evidence: EvIds and CoVars]</span><span>
</span><span id="line-131"></span><span>                       </span><span class="hs-comment">--   predicate: isCoVar</span><span>
</span><span id="line-132"></span><span>
</span><span id="line-133"></span><span class="hs-comment">-- |</span><span>
</span><span id="line-134"></span><span class="hs-keyword">type</span><span> </span><span id="NcId"><span class="annot"><a href="GHC.Types.Var.html#NcId"><span class="hs-identifier hs-var">NcId</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>        </span><span class="hs-comment">-- A term-level (value) variable that is</span><span>
</span><span id="line-135"></span><span>                       </span><span class="hs-comment">-- /not/ an (unlifted) coercion</span><span>
</span><span id="line-136"></span><span>                       </span><span class="hs-comment">--    predicate: isNonCoVarId</span><span>
</span><span id="line-137"></span><span>
</span><span id="line-138"></span><span class="hs-comment">-- | Type or kind Variable</span><span>
</span><span id="line-139"></span><span class="hs-keyword">type</span><span> </span><span id="TyVar"><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-var">TyVar</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>     </span><span class="hs-comment">-- Type *or* kind variable (historical)</span><span>
</span><span id="line-140"></span><span>
</span><span id="line-141"></span><span class="hs-comment">-- | Type or Kind Variable</span><span>
</span><span id="line-142"></span><span class="hs-keyword">type</span><span> </span><span id="TKVar"><span class="annot"><a href="GHC.Types.Var.html#TKVar"><span class="hs-identifier hs-var">TKVar</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>     </span><span class="hs-comment">-- Type *or* kind variable (historical)</span><span>
</span><span id="line-143"></span><span>
</span><span id="line-144"></span><span class="hs-comment">-- | Type variable that might be a metavariable</span><span>
</span><span id="line-145"></span><span class="hs-keyword">type</span><span> </span><span id="TcTyVar"><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-var">TcTyVar</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-146"></span><span>
</span><span id="line-147"></span><span class="hs-comment">-- | Type Variable</span><span>
</span><span id="line-148"></span><span class="hs-keyword">type</span><span> </span><span id="TypeVar"><span class="annot"><a href="GHC.Types.Var.html#TypeVar"><span class="hs-identifier hs-var">TypeVar</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>     </span><span class="hs-comment">-- Definitely a type variable</span><span>
</span><span id="line-149"></span><span>
</span><span id="line-150"></span><span class="hs-comment">-- | Kind Variable</span><span>
</span><span id="line-151"></span><span class="hs-keyword">type</span><span> </span><span id="KindVar"><span class="annot"><a href="GHC.Types.Var.html#KindVar"><span class="hs-identifier hs-var">KindVar</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>     </span><span class="hs-comment">-- Definitely a kind variable</span><span>
</span><span id="line-152"></span><span>                       </span><span class="hs-comment">-- See Note [Kind and type variables]</span><span>
</span><span id="line-153"></span><span>
</span><span id="line-154"></span><span class="hs-comment">-- See Note [Evidence: EvIds and CoVars]</span><span>
</span><span id="line-155"></span><span class="hs-comment">-- | Evidence Identifier</span><span>
</span><span id="line-156"></span><span class="hs-keyword">type</span><span> </span><span id="EvId"><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier hs-var">EvId</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>        </span><span class="hs-comment">-- Term-level evidence: DictId, IpId, or EqVar</span><span>
</span><span id="line-157"></span><span>
</span><span id="line-158"></span><span class="hs-comment">-- | Evidence Variable</span><span>
</span><span id="line-159"></span><span class="hs-keyword">type</span><span> </span><span id="EvVar"><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-var">EvVar</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier hs-type">EvId</span></a></span><span>      </span><span class="hs-comment">-- ...historical name for EvId</span><span>
</span><span id="line-160"></span><span>
</span><span id="line-161"></span><span class="hs-comment">-- | Dictionary Function Identifier</span><span>
</span><span id="line-162"></span><span class="hs-keyword">type</span><span> </span><span id="DFunId"><span class="annot"><a href="GHC.Types.Var.html#DFunId"><span class="hs-identifier hs-var">DFunId</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>        </span><span class="hs-comment">-- A dictionary function</span><span>
</span><span id="line-163"></span><span>
</span><span id="line-164"></span><span class="hs-comment">-- | Dictionary Identifier</span><span>
</span><span id="line-165"></span><span class="hs-keyword">type</span><span> </span><span id="DictId"><span class="annot"><a href="GHC.Types.Var.html#DictId"><span class="hs-identifier hs-var">DictId</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier hs-type">EvId</span></a></span><span>      </span><span class="hs-comment">-- A dictionary variable</span><span>
</span><span id="line-166"></span><span>
</span><span id="line-167"></span><span class="hs-comment">-- | Implicit parameter Identifier</span><span>
</span><span id="line-168"></span><span class="hs-keyword">type</span><span> </span><span id="IpId"><span class="annot"><a href="GHC.Types.Var.html#IpId"><span class="hs-identifier hs-var">IpId</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier hs-type">EvId</span></a></span><span>      </span><span class="hs-comment">-- A term-level implicit parameter</span><span>
</span><span id="line-169"></span><span>
</span><span id="line-170"></span><span class="hs-comment">-- | Equality Variable</span><span>
</span><span id="line-171"></span><span class="hs-keyword">type</span><span> </span><span id="EqVar"><span class="annot"><a href="GHC.Types.Var.html#EqVar"><span class="hs-identifier hs-var">EqVar</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier hs-type">EvId</span></a></span><span>      </span><span class="hs-comment">-- Boxed equality evidence</span><span>
</span><span id="line-172"></span><span class="hs-keyword">type</span><span> </span><span id="JoinId"><span class="annot"><a href="GHC.Types.Var.html#JoinId"><span class="hs-identifier hs-var">JoinId</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>        </span><span class="hs-comment">-- A join variable</span><span>
</span><span id="line-173"></span><span>
</span><span id="line-174"></span><span class="hs-comment">-- | Type or Coercion Variable</span><span>
</span><span id="line-175"></span><span class="hs-keyword">type</span><span> </span><span id="TyCoVar"><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-var">TyCoVar</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>       </span><span class="hs-comment">-- Type, *or* coercion variable</span><span>
</span><span id="line-176"></span><span>                        </span><span class="hs-comment">--   predicate: isTyCoVar</span><span>
</span><span id="line-177"></span><span>
</span><span id="line-178"></span><span>
</span><span id="line-179"></span><span class="hs-comment">{- Many passes apply a substitution, and it's very handy to have type
   synonyms to remind us whether or not the substitution has been applied -}</span><span>
</span><span id="line-181"></span><span>
</span><span id="line-182"></span><span class="hs-keyword">type</span><span> </span><span id="InVar"><span class="annot"><a href="GHC.Types.Var.html#InVar"><span class="hs-identifier hs-var">InVar</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-183"></span><span class="hs-keyword">type</span><span> </span><span id="InTyVar"><span class="annot"><a href="GHC.Types.Var.html#InTyVar"><span class="hs-identifier hs-var">InTyVar</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-184"></span><span class="hs-keyword">type</span><span> </span><span id="InCoVar"><span class="annot"><a href="GHC.Types.Var.html#InCoVar"><span class="hs-identifier hs-var">InCoVar</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#CoVar"><span class="hs-identifier hs-type">CoVar</span></a></span><span>
</span><span id="line-185"></span><span class="hs-keyword">type</span><span> </span><span id="InId"><span class="annot"><a href="GHC.Types.Var.html#InId"><span class="hs-identifier hs-var">InId</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-186"></span><span class="hs-keyword">type</span><span> </span><span id="OutVar"><span class="annot"><a href="GHC.Types.Var.html#OutVar"><span class="hs-identifier hs-var">OutVar</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-187"></span><span class="hs-keyword">type</span><span> </span><span id="OutTyVar"><span class="annot"><a href="GHC.Types.Var.html#OutTyVar"><span class="hs-identifier hs-var">OutTyVar</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-188"></span><span class="hs-keyword">type</span><span> </span><span id="OutCoVar"><span class="annot"><a href="GHC.Types.Var.html#OutCoVar"><span class="hs-identifier hs-var">OutCoVar</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#CoVar"><span class="hs-identifier hs-type">CoVar</span></a></span><span>
</span><span id="line-189"></span><span class="hs-keyword">type</span><span> </span><span id="OutId"><span class="annot"><a href="GHC.Types.Var.html#OutId"><span class="hs-identifier hs-var">OutId</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-190"></span><span>
</span><span id="line-191"></span><span>
</span><span id="line-192"></span><span>
</span><span id="line-193"></span><span class="hs-comment">{- Note [Evidence: EvIds and CoVars]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* An EvId (evidence Id) is a term-level evidence variable
  (dictionary, implicit parameter, or equality). Could be boxed or unboxed.

* DictId, IpId, and EqVar are synonyms when we know what kind of
  evidence we are talking about.  For example, an EqVar has type (t1 ~ t2).

* A CoVar is always an un-lifted coercion, of type (t1 ~# t2) or (t1 ~R# t2)

Note [Kind and type variables]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Before kind polymorphism, TyVar were used to mean type variables. Now
they are used to mean kind *or* type variables. KindVar is used when we
know for sure that it is a kind variable. In future, we might want to
go over the whole compiler code to use:
   - TKVar   to mean kind or type variables
   - TypeVar to mean         type variables only
   - KindVar to mean kind         variables


************************************************************************
*                                                                      *
\subsection{The main data type declarations}
*                                                                      *
************************************************************************


Every @Var@ has a @Unique@, to uniquify it and for fast comparison, a
@Type@, and an @IdInfo@ (non-essential info about it, e.g.,
strictness).  The essential info about different kinds of @Vars@ is
in its @VarDetails@.
-}</span><span>
</span><span id="line-226"></span><span>
</span><span id="line-227"></span><span class="hs-comment">-- | Variable</span><span>
</span><span id="line-228"></span><span class="hs-comment">--</span><span>
</span><span id="line-229"></span><span class="hs-comment">-- Essentially a typed 'Name', that may also contain some additional information</span><span>
</span><span id="line-230"></span><span class="hs-comment">-- about the 'Var' and its use sites.</span><span>
</span><span id="line-231"></span><span class="hs-keyword">data</span><span> </span><span id="Var"><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-var">Var</span></a></span></span><span>
</span><span id="line-232"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="TyVar"><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-var">TyVar</span></a></span></span><span> </span><span class="hs-special">{</span><span>  </span><span class="hs-comment">-- Type and kind variables</span><span>
</span><span id="line-233"></span><span>             </span><span class="hs-comment">-- see Note [Kind and type variables]</span><span>
</span><span id="line-234"></span><span>        </span><span id="varName"><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-235"></span><span>        </span><span id="realUnique"><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-pragma">{-# UNPACK</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-glyph">!</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span>
</span><span id="line-236"></span><span>                                     </span><span class="hs-comment">-- ^ Key for fast comparison</span><span>
</span><span id="line-237"></span><span>                                     </span><span class="hs-comment">-- Identical to the Unique in the name,</span><span>
</span><span id="line-238"></span><span>                                     </span><span class="hs-comment">-- cached here for speed</span><span>
</span><span id="line-239"></span><span>        </span><span id="varType"><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var hs-var">varType</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span>           </span><span class="hs-comment">-- ^ The type or kind of the 'Var' in question</span><span>
</span><span id="line-240"></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-241"></span><span>
</span><span id="line-242"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="TcTyVar"><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-var">TcTyVar</span></a></span></span><span> </span><span class="hs-special">{</span><span>                           </span><span class="hs-comment">-- Used only during type inference</span><span>
</span><span id="line-243"></span><span>                                        </span><span class="hs-comment">-- Used for kind variables during</span><span>
</span><span id="line-244"></span><span>                                        </span><span class="hs-comment">-- inference, as well</span><span>
</span><span id="line-245"></span><span>        </span><span id="varName"><span class="annot"><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-246"></span><span>        </span><span id="realUnique"><span class="annot"><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span></span><span>     </span><span class="hs-glyph">::</span><span> </span><span class="hs-pragma">{-# UNPACK</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-glyph">!</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span>
</span><span id="line-247"></span><span>        </span><span id="varType"><span class="annot"><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-248"></span><span>        </span><span id="tc_tv_details"><span class="annot"><span class="annottext">Var -&gt; TcTyVarDetails
</span><a href="GHC.Types.Var.html#tc_tv_details"><span class="hs-identifier hs-var hs-var">tc_tv_details</span></a></span></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcTyVarDetails"><span class="hs-identifier hs-type">TcTyVarDetails</span></a></span><span>
</span><span id="line-249"></span><span>  </span><span class="hs-special">}</span><span>
</span><span id="line-250"></span><span>
</span><span id="line-251"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="Id"><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-var">Id</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-252"></span><span>        </span><span id="varName"><span class="annot"><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-253"></span><span>        </span><span id="realUnique"><span class="annot"><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-pragma">{-# UNPACK</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-glyph">!</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span>
</span><span id="line-254"></span><span>        </span><span id="varType"><span class="annot"><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-255"></span><span>        </span><span id="varMult"><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var hs-var">varMult</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Mult"><span class="hs-identifier hs-type">Mult</span></a></span><span class="hs-special">,</span><span>             </span><span class="hs-comment">-- See Note [Multiplicity of let binders]</span><span>
</span><span id="line-256"></span><span>        </span><span id="idScope"><span class="annot"><span class="annottext">Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var hs-var">idScope</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#IdScope"><span class="hs-identifier hs-type">IdScope</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-257"></span><span>        </span><span id="id_details"><span class="annot"><span class="annottext">Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var hs-var">id_details</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span class="hs-special">,</span><span>        </span><span class="hs-comment">-- Stable, doesn't change</span><span>
</span><span id="line-258"></span><span>        </span><span id="id_info"><span class="annot"><span class="annottext">Var -&gt; IdInfo
</span><a href="GHC.Types.Var.html#id_info"><span class="hs-identifier hs-var hs-var">id_info</span></a></span></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span> </span><span class="hs-special">}</span><span>          </span><span class="hs-comment">-- Unstable, updated by simplifier</span><span>
</span><span id="line-259"></span><span>
</span><span id="line-260"></span><span class="hs-comment">-- | Identifier Scope</span><span>
</span><span id="line-261"></span><span class="hs-keyword">data</span><span> </span><span id="IdScope"><span class="annot"><a href="GHC.Types.Var.html#IdScope"><span class="hs-identifier hs-var">IdScope</span></a></span></span><span>    </span><span class="hs-comment">-- See Note [GlobalId/LocalId]</span><span>
</span><span id="line-262"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="GlobalId"><span class="annot"><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span></span><span>
</span><span id="line-263"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="LocalId"><span class="annot"><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-var">LocalId</span></a></span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ExportFlag"><span class="hs-identifier hs-type">ExportFlag</span></a></span><span>
</span><span id="line-264"></span><span>
</span><span id="line-265"></span><span class="hs-keyword">data</span><span> </span><span id="ExportFlag"><span class="annot"><a href="GHC.Types.Var.html#ExportFlag"><span class="hs-identifier hs-var">ExportFlag</span></a></span></span><span>   </span><span class="hs-comment">-- See Note [ExportFlag on binders]</span><span>
</span><span id="line-266"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="NotExported"><span class="annot"><a href="GHC.Types.Var.html#NotExported"><span class="hs-identifier hs-var">NotExported</span></a></span></span><span>   </span><span class="hs-comment">-- ^ Not exported: may be discarded as dead code.</span><span>
</span><span id="line-267"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="Exported"><span class="annot"><a href="GHC.Types.Var.html#Exported"><span class="hs-identifier hs-var">Exported</span></a></span></span><span>      </span><span class="hs-comment">-- ^ Exported: kept alive</span><span>
</span><span id="line-268"></span><span>
</span><span id="line-269"></span><span class="hs-comment">{- Note [ExportFlag on binders]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
An ExportFlag of &quot;Exported&quot; on a top-level binder says &quot;keep this
binding alive; do not drop it as dead code&quot;.  This transitively
keeps alive all the other top-level bindings that this binding refers
to.  This property is persisted all the way down the pipeline, so that
the binding will be compiled all the way to object code, and its
symbols will appear in the linker symbol table.

However, note that this use of &quot;exported&quot; is quite different to the
export list on a Haskell module.  Setting the ExportFlag on an Id does
/not/ mean that if you import the module (in Haskell source code) you
will see this Id.  Of course, things that appear in the export list
of the source Haskell module do indeed have their ExportFlag set.
But many other things, such as dictionary functions, are kept alive
by having their ExportFlag set, even though they are not exported
in the source-code sense.

We should probably use a different term for ExportFlag, like
KeepAlive.

Note [GlobalId/LocalId]
~~~~~~~~~~~~~~~~~~~~~~~
A GlobalId is
  * always a constant (top-level)
  * imported, or data constructor, or primop, or record selector
  * has a Unique that is globally unique across the whole
    GHC invocation (a single invocation may compile multiple modules)
  * never treated as a candidate by the free-variable finder;
        it's a constant!

A LocalId is
  * bound within an expression (lambda, case, local let(rec))
  * or defined at top level in the module being compiled
  * always treated as a candidate by the free-variable finder

After CoreTidy, top-level LocalIds are turned into GlobalIds

Note [Multiplicity of let binders]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In Core, let-binders' multiplicity is always completely determined by syntax:
a recursive let will always have multiplicity Many (it's a prerequisite for
being recursive), and non-recursive let doesn't have a conventional multiplicity,
instead they act, for the purpose of multiplicity, as an alias for their
right-hand side.

Therefore, the `varMult` field of identifier is only used by binders in lambda
and case expressions. In a let expression the `varMult` field holds an
arbitrary value which will (and must!) be ignored.
-}</span><span>
</span><span id="line-319"></span><span>
</span><span id="line-320"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807736"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-321"></span><span>  </span><span id="local-6989586621680807729"><span class="annot"><span class="annottext">ppr :: Var -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span id="local-6989586621680807727"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807727"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(SDocContext -&gt; Bool) -&gt; (Bool -&gt; SDoc) -&gt; SDoc
forall a. (SDocContext -&gt; a) -&gt; (a -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sdocOption"><span class="hs-identifier hs-var">sdocOption</span></a></span><span> </span><span class="annot"><span class="annottext">SDocContext -&gt; Bool
</span><a href="GHC.Utils.Outputable.html#sdocSuppressVarKinds"><span class="hs-identifier hs-var hs-var">sdocSuppressVarKinds</span></a></span><span> </span><span class="annot"><span class="annottext">((Bool -&gt; SDoc) -&gt; SDoc) -&gt; (Bool -&gt; SDoc) -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621680807724"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807724"><span class="hs-identifier hs-var">supp_var_kinds</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-322"></span><span>            </span><span class="annot"><span class="annottext">(Bool -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#getPprDebug"><span class="hs-identifier hs-var">getPprDebug</span></a></span><span> </span><span class="annot"><span class="annottext">((Bool -&gt; SDoc) -&gt; SDoc) -&gt; (Bool -&gt; SDoc) -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621680807722"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807722"><span class="hs-identifier hs-var">debug</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-323"></span><span>            </span><span class="annot"><span class="annottext">(PprStyle -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#getPprStyle"><span class="hs-identifier hs-var">getPprStyle</span></a></span><span> </span><span class="annot"><span class="annottext">((PprStyle -&gt; SDoc) -&gt; SDoc) -&gt; (PprStyle -&gt; SDoc) -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621680807720"><span class="annot"><span class="annottext">PprStyle
</span><a href="#local-6989586621680807720"><span class="hs-identifier hs-var">sty</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-324"></span><span>            </span><span class="hs-keyword">let</span><span>
</span><span id="line-325"></span><span>              </span><span id="local-6989586621680807719"><span class="annot"><span class="annottext">ppr_var :: SDoc
</span><a href="#local-6989586621680807719"><span class="hs-identifier hs-var hs-var">ppr_var</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807727"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-326"></span><span>                  </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-327"></span><span>                     </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807722"><span class="hs-identifier hs-var">debug</span></a></span><span>
</span><span id="line-328"></span><span>                     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#brackets"><span class="hs-identifier hs-var">brackets</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;tv&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-329"></span><span>
</span><span id="line-330"></span><span>                  </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-type">TcTyVar</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">tc_tv_details :: Var -&gt; TcTyVarDetails
</span><a href="GHC.Types.Var.html#tc_tv_details"><span class="hs-identifier hs-var">tc_tv_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807716"><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807716"><span class="hs-identifier hs-var">d</span></a></span></span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-331"></span><span>                     </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">PprStyle -&gt; Bool
</span><a href="GHC.Utils.Outputable.html#dumpStyle"><span class="hs-identifier hs-var">dumpStyle</span></a></span><span> </span><span class="annot"><span class="annottext">PprStyle
</span><a href="#local-6989586621680807720"><span class="hs-identifier hs-var">sty</span></a></span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Bool
</span><span class="hs-operator hs-var">||</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807722"><span class="hs-identifier hs-var">debug</span></a></span><span>
</span><span id="line-332"></span><span>                     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#brackets"><span class="hs-identifier hs-var">brackets</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcTyVarDetails -&gt; SDoc
</span><a href="GHC.Tc.Utils.TcType.html#pprTcTyVarDetails"><span class="hs-identifier hs-var">pprTcTyVarDetails</span></a></span><span> </span><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807716"><span class="hs-identifier hs-var">d</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-333"></span><span>
</span><span id="line-334"></span><span>                  </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807713"><span class="annot"><span class="annottext">IdScope
</span><a href="#local-6989586621680807713"><span class="hs-identifier hs-var">s</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">id_details :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807712"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807712"><span class="hs-identifier hs-var">d</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-335"></span><span>                     </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807722"><span class="hs-identifier hs-var">debug</span></a></span><span>
</span><span id="line-336"></span><span>                     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#brackets"><span class="hs-identifier hs-var">brackets</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">IdScope -&gt; SDoc
</span><a href="GHC.Types.Var.html#ppr_id_scope"><span class="hs-identifier hs-var">ppr_id_scope</span></a></span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="#local-6989586621680807713"><span class="hs-identifier hs-var">s</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">IdDetails -&gt; SDoc
</span><a href="GHC.Types.Id.Info.html#pprIdDetails"><span class="hs-identifier hs-var">pprIdDetails</span></a></span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807712"><span class="hs-identifier hs-var">d</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-337"></span><span>
</span><span id="line-338"></span><span>                  </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#empty"><span class="hs-identifier hs-var">empty</span></a></span><span>
</span><span id="line-339"></span><span>            </span><span class="hs-keyword">in</span><span> </span><span class="hs-keyword">if</span><span>
</span><span id="line-340"></span><span>               </span><span class="hs-glyph">|</span><span>  </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807722"><span class="hs-identifier hs-var">debug</span></a></span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Bool
</span><span class="hs-operator hs-var">&amp;&amp;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680807724"><span class="hs-identifier hs-var">supp_var_kinds</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-341"></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#parens"><span class="hs-identifier hs-var">parens</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807727"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe Mult -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Maybe Mult
</span><a href="GHC.Types.Var.html#varMultMaybe"><span class="hs-identifier hs-var">varMultMaybe</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807727"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-342"></span><span>                                              </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680807719"><span class="hs-identifier hs-var">ppr_var</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span>
</span><span id="line-343"></span><span>                          </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#dcolon"><span class="hs-identifier hs-var">dcolon</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; SDoc
</span><a href="GHC.Core.TyCo.Ppr.html#pprKind"><span class="hs-identifier hs-var">pprKind</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier hs-var">tyVarKind</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807727"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-344"></span><span>               </span><span class="hs-glyph">|</span><span>  </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-345"></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Name -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807727"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680807719"><span class="hs-identifier hs-var">ppr_var</span></a></span><span>
</span><span id="line-346"></span><span>
</span><span id="line-347"></span><span class="annot"><a href="GHC.Types.Var.html#ppr_id_scope"><span class="hs-identifier hs-type">ppr_id_scope</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#IdScope"><span class="hs-identifier hs-type">IdScope</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>
</span><span id="line-348"></span><span id="ppr_id_scope"><span class="annot"><span class="annottext">ppr_id_scope :: IdScope -&gt; SDoc
</span><a href="GHC.Types.Var.html#ppr_id_scope"><span class="hs-identifier hs-var hs-var">ppr_id_scope</span></a></span></span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;gid&quot;</span></span><span>
</span><span id="line-349"></span><span class="annot"><a href="GHC.Types.Var.html#ppr_id_scope"><span class="hs-identifier hs-var">ppr_id_scope</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-type">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#Exported"><span class="hs-identifier hs-var">Exported</span></a></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;lidx&quot;</span></span><span>
</span><span id="line-350"></span><span class="annot"><a href="GHC.Types.Var.html#ppr_id_scope"><span class="hs-identifier hs-var">ppr_id_scope</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-type">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#NotExported"><span class="hs-identifier hs-var">NotExported</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;lid&quot;</span></span><span>
</span><span id="line-351"></span><span>
</span><span id="line-352"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807702"><span class="annot"><a href="GHC.Types.Name.html#NamedThing"><span class="hs-identifier hs-type">NamedThing</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-353"></span><span>  </span><span id="local-6989586621680807699"><span class="annot"><span class="annottext">getName :: Var -&gt; Name
</span><a href="GHC.Types.Name.html#getName"><span class="hs-identifier hs-var hs-var hs-var hs-var">getName</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span><span>
</span><span id="line-354"></span><span>
</span><span id="line-355"></span><span class="hs-keyword">instance</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Uniquable"><span class="hs-identifier hs-type">Uniquable</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-356"></span><span>  </span><span id="local-6989586621680807694"><span class="annot"><span class="annottext">getUnique :: Var -&gt; Unique
</span><a href="#local-6989586621680807694"><span class="hs-identifier hs-var hs-var hs-var hs-var">getUnique</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Unique
</span><a href="GHC.Types.Var.html#varUnique"><span class="hs-identifier hs-var">varUnique</span></a></span><span>
</span><span id="line-357"></span><span>
</span><span id="line-358"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807691"><span class="annot"><span class="hs-identifier hs-type">Eq</span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-359"></span><span>    </span><span id="local-6989586621680807687"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807687"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807686"><span class="annot"><span class="annottext">== :: Var -&gt; Var -&gt; Bool
</span><span class="hs-operator hs-var hs-var hs-var hs-var">==</span></span></span><span> </span><span id="local-6989586621680807685"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807685"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807687"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807685"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-360"></span><span>
</span><span id="line-361"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807674"><span id="local-6989586621680807676"><span class="annot"><span class="hs-identifier hs-type">Ord</span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-362"></span><span>    </span><span id="local-6989586621680807670"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807670"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807669"><span class="annot"><span class="annottext">&lt;= :: Var -&gt; Var -&gt; Bool
</span><span class="hs-operator hs-var hs-var hs-var hs-var">&lt;=</span></span></span><span> </span><span id="local-6989586621680807667"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807667"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807670"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;=</span></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807667"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-363"></span><span>    </span><span id="local-6989586621680807665"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807665"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807664"><span class="annot"><span class="annottext">&lt; :: Var -&gt; Var -&gt; Bool
</span><span class="hs-operator hs-var hs-var hs-var hs-var">&lt;</span></span></span><span>  </span><span id="local-6989586621680807662"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807662"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807665"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;</span></span><span>  </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807662"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-364"></span><span>    </span><span id="local-6989586621680807660"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807660"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807659"><span class="annot"><span class="annottext">&gt;= :: Var -&gt; Var -&gt; Bool
</span><span class="hs-operator hs-var hs-var hs-var hs-var">&gt;=</span></span></span><span> </span><span id="local-6989586621680807658"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807658"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807660"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&gt;=</span></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807658"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-365"></span><span>    </span><span id="local-6989586621680807656"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807656"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807655"><span class="annot"><span class="annottext">&gt; :: Var -&gt; Var -&gt; Bool
</span><span class="hs-operator hs-var hs-var hs-var hs-var">&gt;</span></span></span><span>  </span><span id="local-6989586621680807653"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807653"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807656"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&gt;</span></span><span>  </span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807653"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-366"></span><span>    </span><span id="local-6989586621680807652"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807652"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807651"><span class="annot"><span class="annottext">compare :: Var -&gt; Var -&gt; Ordering
</span><span class="hs-operator hs-var hs-var hs-var hs-var">`compare`</span></span></span><span> </span><span id="local-6989586621680807649"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807649"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807652"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Var -&gt; Ordering
</span><a href="GHC.Types.Var.html#nonDetCmpVar"><span class="hs-operator hs-var">`nonDetCmpVar`</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807649"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-367"></span><span>
</span><span id="line-368"></span><span class="hs-comment">-- | Compare Vars by their Uniques.</span><span>
</span><span id="line-369"></span><span class="hs-comment">-- This is what Ord Var does, provided here to make it explicit at the</span><span>
</span><span id="line-370"></span><span class="hs-comment">-- call-site that it can introduce non-determinism.</span><span>
</span><span id="line-371"></span><span class="hs-comment">-- See Note [Unique Determinism]</span><span>
</span><span id="line-372"></span><span class="annot"><a href="GHC.Types.Var.html#nonDetCmpVar"><span class="hs-identifier hs-type">nonDetCmpVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Ordering</span></span><span>
</span><span id="line-373"></span><span id="nonDetCmpVar"><span class="annot"><span class="annottext">nonDetCmpVar :: Var -&gt; Var -&gt; Ordering
</span><a href="GHC.Types.Var.html#nonDetCmpVar"><span class="hs-identifier hs-var hs-var">nonDetCmpVar</span></a></span></span><span> </span><span id="local-6989586621680807648"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807648"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621680807647"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807647"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Unique
</span><a href="GHC.Types.Var.html#varUnique"><span class="hs-identifier hs-var">varUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807648"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Unique -&gt; Ordering
</span><a href="GHC.Types.Unique.html#nonDetCmpUnique"><span class="hs-operator hs-var">`nonDetCmpUnique`</span></a></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Unique
</span><a href="GHC.Types.Var.html#varUnique"><span class="hs-identifier hs-var">varUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807647"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-374"></span><span>
</span><span id="line-375"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807620"><span id="local-6989586621680807622"><span id="local-6989586621680807624"><span id="local-6989586621680807626"><span id="local-6989586621680807628"><span id="local-6989586621680807630"><span id="local-6989586621680807632"><span id="local-6989586621680807634"><span id="local-6989586621680807636"><span id="local-6989586621680807638"><span id="local-6989586621680807643"><span class="annot"><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-type">Data</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span></span></span></span></span></span></span></span></span></span></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-376"></span><span>  </span><span class="hs-comment">-- don't traverse?</span><span>
</span><span id="line-377"></span><span>  </span><span id="local-6989586621680807618"><span class="annot"><span class="annottext">toConstr :: Var -&gt; Constr
</span><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">toConstr</span></a></span></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Utils.Misc.html#abstractConstr"><span class="hs-identifier hs-var">abstractConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Var&quot;</span></span><span>
</span><span id="line-378"></span><span>  </span><span id="local-6989586621680807613"><span class="annot"><span class="annottext">gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c Var
</span><a href="../../base/src/Data.Data.html#gunfold"><span class="hs-identifier hs-var hs-var hs-var hs-var">gunfold</span></a></span></span><span> </span><span class="annot"><span class="annottext">forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">forall r. r -&gt; c r
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr -&gt; c Var
forall a. HasCallStack =&gt; String -&gt; a
</span><a href="../../base/src/GHC.Err.html#error"><span class="hs-identifier hs-var">error</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;gunfold&quot;</span></span><span>
</span><span id="line-379"></span><span>  </span><span id="local-6989586621680807610"><span class="annot"><span class="annottext">dataTypeOf :: Var -&gt; DataType
</span><a href="../../base/src/Data.Data.html#dataTypeOf"><span class="hs-identifier hs-var hs-var hs-var hs-var">dataTypeOf</span></a></span></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; DataType
</span><a href="../../base/src/Data.Data.html#mkNoRepType"><span class="hs-identifier hs-var">mkNoRepType</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Var&quot;</span></span><span>
</span><span id="line-380"></span><span>
</span><span id="line-381"></span><span class="hs-keyword">instance</span><span> </span><span class="annot"><a href="GHC.Types.Name.Occurrence.html#HasOccName"><span class="hs-identifier hs-type">HasOccName</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-382"></span><span>  </span><span id="local-6989586621680807604"><span class="annot"><span class="annottext">occName :: Var -&gt; OccName
</span><a href="GHC.Types.Name.Occurrence.html#occName"><span class="hs-identifier hs-var hs-var hs-var hs-var">occName</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name -&gt; OccName
</span><a href="GHC.Types.Name.html#nameOccName"><span class="hs-identifier hs-var">nameOccName</span></a></span><span> </span><span class="annot"><span class="annottext">(Name -&gt; OccName) -&gt; (Var -&gt; Name) -&gt; Var -&gt; OccName
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span><span>
</span><span id="line-383"></span><span>
</span><span id="line-384"></span><span class="annot"><a href="GHC.Types.Var.html#varUnique"><span class="hs-identifier hs-type">varUnique</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span>
</span><span id="line-385"></span><span id="varUnique"><span class="annot"><span class="annottext">varUnique :: Var -&gt; Unique
</span><a href="GHC.Types.Var.html#varUnique"><span class="hs-identifier hs-var hs-var">varUnique</span></a></span></span><span> </span><span id="local-6989586621680807600"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807600"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Unique
</span><a href="GHC.Types.Unique.html#mkUniqueGrimily"><span class="hs-identifier hs-var">mkUniqueGrimily</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var hs-var">realUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807600"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-386"></span><span>
</span><span id="line-387"></span><span class="annot"><a href="GHC.Types.Var.html#varMultMaybe"><span class="hs-identifier hs-type">varMultMaybe</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Mult"><span class="hs-identifier hs-type">Mult</span></a></span><span>
</span><span id="line-388"></span><span id="varMultMaybe"><span class="annot"><span class="annottext">varMultMaybe :: Var -&gt; Maybe Mult
</span><a href="GHC.Types.Var.html#varMultMaybe"><span class="hs-identifier hs-var hs-var">varMultMaybe</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varMult :: Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807599"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807599"><span class="hs-identifier hs-var">mult</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Maybe Mult
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807599"><span class="hs-identifier hs-var">mult</span></a></span><span>
</span><span id="line-389"></span><span class="annot"><a href="GHC.Types.Var.html#varMultMaybe"><span class="hs-identifier hs-var">varMultMaybe</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe Mult
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-390"></span><span>
</span><span id="line-391"></span><span class="annot"><a href="GHC.Types.Var.html#setVarUnique"><span class="hs-identifier hs-type">setVarUnique</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-392"></span><span id="setVarUnique"><span class="annot"><span class="annottext">setVarUnique :: Var -&gt; Unique -&gt; Var
</span><a href="GHC.Types.Var.html#setVarUnique"><span class="hs-identifier hs-var hs-var">setVarUnique</span></a></span></span><span> </span><span id="local-6989586621680807598"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807598"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span id="local-6989586621680807597"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680807597"><span class="hs-identifier hs-var">uniq</span></a></span></span><span>
</span><span id="line-393"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807598"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">realUnique :: Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Int
</span><a href="GHC.Types.Unique.html#getKey"><span class="hs-identifier hs-var">getKey</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680807597"><span class="hs-identifier hs-var">uniq</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-394"></span><span>          </span><span class="annot"><span class="annottext">varName :: Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name -&gt; Unique -&gt; Name
</span><a href="GHC.Types.Name.html#setNameUnique"><span class="hs-identifier hs-var">setNameUnique</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807598"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680807597"><span class="hs-identifier hs-var">uniq</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-395"></span><span>
</span><span id="line-396"></span><span class="annot"><a href="GHC.Types.Var.html#setVarName"><span class="hs-identifier hs-type">setVarName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-397"></span><span id="setVarName"><span class="annot"><span class="annottext">setVarName :: Var -&gt; Name -&gt; Var
</span><a href="GHC.Types.Var.html#setVarName"><span class="hs-identifier hs-var hs-var">setVarName</span></a></span></span><span> </span><span id="local-6989586621680807595"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807595"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span id="local-6989586621680807594"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807594"><span class="hs-identifier hs-var">new_name</span></a></span></span><span>
</span><span id="line-398"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807595"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">realUnique :: Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Int
</span><a href="GHC.Types.Unique.html#getKey"><span class="hs-identifier hs-var">getKey</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name -&gt; Unique
forall a. Uniquable a =&gt; a -&gt; Unique
</span><a href="GHC.Types.Unique.html#getUnique"><span class="hs-identifier hs-var">getUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807594"><span class="hs-identifier hs-var">new_name</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-399"></span><span>          </span><span class="annot"><span class="annottext">varName :: Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807594"><span class="hs-identifier hs-var">new_name</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-400"></span><span>
</span><span id="line-401"></span><span class="annot"><a href="GHC.Types.Var.html#setVarType"><span class="hs-identifier hs-type">setVarType</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-402"></span><span id="setVarType"><span class="annot"><span class="annottext">setVarType :: Var -&gt; Mult -&gt; Var
</span><a href="GHC.Types.Var.html#setVarType"><span class="hs-identifier hs-var hs-var">setVarType</span></a></span></span><span> </span><span id="local-6989586621680807593"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807593"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621680807592"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807592"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807593"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807592"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-403"></span><span>
</span><span id="line-404"></span><span class="hs-comment">-- | Update a 'Var's type. Does not update the /multiplicity/</span><span>
</span><span id="line-405"></span><span class="hs-comment">-- stored in an 'Id', if any. Because of the possibility for</span><span>
</span><span id="line-406"></span><span class="hs-comment">-- abuse, ASSERTs that there is no multiplicity to update.</span><span>
</span><span id="line-407"></span><span class="annot"><a href="GHC.Types.Var.html#updateVarType"><span class="hs-identifier hs-type">updateVarType</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-408"></span><span id="updateVarType"><span class="annot"><span class="annottext">updateVarType :: (Mult -&gt; Mult) -&gt; Var -&gt; Var
</span><a href="GHC.Types.Var.html#updateVarType"><span class="hs-identifier hs-var hs-var">updateVarType</span></a></span></span><span> </span><span id="local-6989586621680807591"><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807591"><span class="hs-identifier hs-var">upd</span></a></span></span><span> </span><span id="local-6989586621680807590"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807590"><span class="hs-identifier hs-var">var</span></a></span></span><span>
</span><span id="line-409"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="GHC.Utils.Misc.html#debugIsOn"><span class="hs-identifier hs-var">debugIsOn</span></a></span><span>
</span><span id="line-410"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807590"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-411"></span><span>      </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_details :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807588"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807588"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier">ASSERT</span><span class="hs-special">(</span><span> </span><span class="hs-identifier">isCoVarDetails</span><span> </span><span class="hs-identifier">details</span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-412"></span><span>                                     </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807586"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-413"></span><span>      </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807586"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-414"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-415"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807586"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-416"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-417"></span><span>    </span><span id="local-6989586621680807586"><span class="annot"><span class="annottext">result :: Var
</span><a href="#local-6989586621680807586"><span class="hs-identifier hs-var hs-var">result</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807590"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807591"><span class="hs-identifier hs-var">upd</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var hs-var">varType</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807590"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-418"></span><span>
</span><span id="line-419"></span><span class="hs-comment">-- | Update a 'Var's type monadically. Does not update the /multiplicity/</span><span>
</span><span id="line-420"></span><span class="hs-comment">-- stored in an 'Id', if any. Because of the possibility for</span><span>
</span><span id="line-421"></span><span class="hs-comment">-- abuse, ASSERTs that there is no multiplicity to update.</span><span>
</span><span id="line-422"></span><span id="local-6989586621680808117"><span class="annot"><a href="GHC.Types.Var.html#updateVarTypeM"><span class="hs-identifier hs-type">updateVarTypeM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#Monad"><span class="hs-identifier hs-type">Monad</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808117"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808117"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808117"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span></span><span>
</span><span id="line-423"></span><span id="updateVarTypeM"><span class="annot"><span class="annottext">updateVarTypeM :: forall (m :: * -&gt; *). Monad m =&gt; (Mult -&gt; m Mult) -&gt; Var -&gt; m Var
</span><a href="GHC.Types.Var.html#updateVarTypeM"><span class="hs-identifier hs-var hs-var">updateVarTypeM</span></a></span></span><span> </span><span id="local-6989586621680807584"><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807584"><span class="hs-identifier hs-var">upd</span></a></span></span><span> </span><span id="local-6989586621680807583"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807583"><span class="hs-identifier hs-var">var</span></a></span></span><span>
</span><span id="line-424"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="GHC.Utils.Misc.html#debugIsOn"><span class="hs-identifier hs-var">debugIsOn</span></a></span><span>
</span><span id="line-425"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807583"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-426"></span><span>      </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_details :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807582"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807582"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier">ASSERT</span><span class="hs-special">(</span><span> </span><span class="hs-identifier">isCoVarDetails</span><span> </span><span class="hs-identifier">details</span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-427"></span><span>                                     </span><span class="annot"><span class="annottext">m Var
</span><a href="#local-6989586621680807581"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-428"></span><span>      </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">m Var
</span><a href="#local-6989586621680807581"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-429"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-430"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">m Var
</span><a href="#local-6989586621680807581"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-431"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-432"></span><span>    </span><span id="local-6989586621680807581"><span class="annot"><span class="annottext">result :: m Var
</span><a href="#local-6989586621680807581"><span class="hs-identifier hs-var hs-var">result</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621680807578"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807578"><span class="hs-identifier hs-var">ty'</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807584"><span class="hs-identifier hs-var">upd</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var hs-var">varType</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807583"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-433"></span><span>                </span><span class="hs-special">;</span><span> </span><span class="annot"><span class="annottext">Var -&gt; m Var
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807583"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807578"><span class="hs-identifier hs-var">ty'</span></a></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-434"></span><span>
</span><span id="line-435"></span><span class="hs-comment">{- *********************************************************************
*                                                                      *
*                   ArgFlag
*                                                                      *
********************************************************************* -}</span><span>
</span><span id="line-440"></span><span>
</span><span id="line-441"></span><span class="hs-comment">-- | Argument Flag</span><span>
</span><span id="line-442"></span><span class="hs-comment">--</span><span>
</span><span id="line-443"></span><span class="hs-comment">-- Is something required to appear in source Haskell ('Required'),</span><span>
</span><span id="line-444"></span><span class="hs-comment">-- permitted by request ('Specified') (visible type application), or</span><span>
</span><span id="line-445"></span><span class="hs-comment">-- prohibited entirely from appearing in source Haskell ('Inferred')?</span><span>
</span><span id="line-446"></span><span class="hs-comment">-- See Note [VarBndrs, TyCoVarBinders, TyConBinders, and visibility] in &quot;GHC.Core.TyCo.Rep&quot;</span><span>
</span><span id="line-447"></span><span class="hs-keyword">data</span><span> </span><span id="ArgFlag"><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-var">ArgFlag</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="Invisible"><span class="annot"><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier hs-var">Invisible</span></a></span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-type">Specificity</span></a></span><span>
</span><span id="line-448"></span><span>             </span><span class="hs-glyph">|</span><span> </span><span id="Required"><span class="annot"><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span></span><span>
</span><span id="line-449"></span><span>  </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span id="local-6989586621680807573"><span id="local-6989586621680807576"><span class="annot"><span class="annottext">ArgFlag -&gt; ArgFlag -&gt; Bool
(ArgFlag -&gt; ArgFlag -&gt; Bool)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; Bool) -&gt; Eq ArgFlag
forall a. (a -&gt; a -&gt; Bool) -&gt; (a -&gt; a -&gt; Bool) -&gt; Eq a
/= :: ArgFlag -&gt; ArgFlag -&gt; Bool
$c/= :: ArgFlag -&gt; ArgFlag -&gt; Bool
== :: ArgFlag -&gt; ArgFlag -&gt; Bool
$c== :: ArgFlag -&gt; ArgFlag -&gt; Bool
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var">Eq</span></span></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680807552"><span id="local-6989586621680807554"><span id="local-6989586621680807557"><span id="local-6989586621680807560"><span id="local-6989586621680807563"><span id="local-6989586621680807566"><span id="local-6989586621680807569"><span class="annot"><span class="annottext">Eq ArgFlag
Eq ArgFlag
-&gt; (ArgFlag -&gt; ArgFlag -&gt; Ordering)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; Bool)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; Bool)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; Bool)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; Bool)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; ArgFlag)
-&gt; (ArgFlag -&gt; ArgFlag -&gt; ArgFlag)
-&gt; Ord ArgFlag
ArgFlag -&gt; ArgFlag -&gt; Bool
ArgFlag -&gt; ArgFlag -&gt; Ordering
ArgFlag -&gt; ArgFlag -&gt; ArgFlag
forall a.
Eq a
-&gt; (a -&gt; a -&gt; Ordering)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; a)
-&gt; (a -&gt; a -&gt; a)
-&gt; Ord a
min :: ArgFlag -&gt; ArgFlag -&gt; ArgFlag
$cmin :: ArgFlag -&gt; ArgFlag -&gt; ArgFlag
max :: ArgFlag -&gt; ArgFlag -&gt; ArgFlag
$cmax :: ArgFlag -&gt; ArgFlag -&gt; ArgFlag
&gt;= :: ArgFlag -&gt; ArgFlag -&gt; Bool
$c&gt;= :: ArgFlag -&gt; ArgFlag -&gt; Bool
&gt; :: ArgFlag -&gt; ArgFlag -&gt; Bool
$c&gt; :: ArgFlag -&gt; ArgFlag -&gt; Bool
&lt;= :: ArgFlag -&gt; ArgFlag -&gt; Bool
$c&lt;= :: ArgFlag -&gt; ArgFlag -&gt; Bool
&lt; :: ArgFlag -&gt; ArgFlag -&gt; Bool
$c&lt; :: ArgFlag -&gt; ArgFlag -&gt; Bool
compare :: ArgFlag -&gt; ArgFlag -&gt; Ordering
$ccompare :: ArgFlag -&gt; ArgFlag -&gt; Ordering
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Ord</span></span></span></span></span></span></span></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680807520"><span id="local-6989586621680807522"><span id="local-6989586621680807524"><span id="local-6989586621680807526"><span id="local-6989586621680807528"><span id="local-6989586621680807530"><span id="local-6989586621680807532"><span id="local-6989586621680807534"><span id="local-6989586621680807536"><span id="local-6989586621680807538"><span id="local-6989586621680807540"><span id="local-6989586621680807542"><span id="local-6989586621680807545"><span id="local-6989586621680807548"><span class="annot"><span class="annottext">Typeable ArgFlag
Typeable ArgFlag
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; ArgFlag -&gt; c ArgFlag)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c ArgFlag)
-&gt; (ArgFlag -&gt; Constr)
-&gt; (ArgFlag -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c ArgFlag))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c ArgFlag))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; ArgFlag -&gt; ArgFlag)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag)
-&gt; Data ArgFlag
ArgFlag -&gt; DataType
ArgFlag -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; ArgFlag -&gt; ArgFlag
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c ArgFlag
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; ArgFlag -&gt; c ArgFlag
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c ArgFlag)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c ArgFlag)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; ArgFlag -&gt; m ArgFlag
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; ArgFlag -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; ArgFlag -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; ArgFlag -&gt; ArgFlag
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; ArgFlag -&gt; ArgFlag
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c ArgFlag)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c ArgFlag)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c ArgFlag)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c ArgFlag)
dataTypeOf :: ArgFlag -&gt; DataType
$cdataTypeOf :: ArgFlag -&gt; DataType
toConstr :: ArgFlag -&gt; Constr
$ctoConstr :: ArgFlag -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c ArgFlag
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c ArgFlag
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; ArgFlag -&gt; c ArgFlag
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; ArgFlag -&gt; c ArgFlag
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hs-special">)</span><span>
</span><span id="line-450"></span><span>  </span><span class="hs-comment">-- (&lt;) on ArgFlag means &quot;is less visible than&quot;</span><span>
</span><span id="line-451"></span><span>
</span><span id="line-452"></span><span class="hs-comment">-- | Whether an 'Invisible' argument may appear in source Haskell.</span><span>
</span><span id="line-453"></span><span class="hs-keyword">data</span><span> </span><span id="Specificity"><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-var">Specificity</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="InferredSpec"><span class="annot"><a href="GHC.Types.Var.html#InferredSpec"><span class="hs-identifier hs-var">InferredSpec</span></a></span></span><span>
</span><span id="line-454"></span><span>                   </span><span class="hs-comment">-- ^ the argument may not appear in source Haskell, it is</span><span>
</span><span id="line-455"></span><span>                   </span><span class="hs-comment">-- only inferred.</span><span>
</span><span id="line-456"></span><span>                 </span><span class="hs-glyph">|</span><span> </span><span id="SpecifiedSpec"><span class="annot"><a href="GHC.Types.Var.html#SpecifiedSpec"><span class="hs-identifier hs-var">SpecifiedSpec</span></a></span></span><span>
</span><span id="line-457"></span><span>                   </span><span class="hs-comment">-- ^ the argument may appear in source Haskell, but isn't</span><span>
</span><span id="line-458"></span><span>                   </span><span class="hs-comment">-- required.</span><span>
</span><span id="line-459"></span><span>  </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span id="local-6989586621680807514"><span id="local-6989586621680807516"><span class="annot"><span class="annottext">Specificity -&gt; Specificity -&gt; Bool
(Specificity -&gt; Specificity -&gt; Bool)
-&gt; (Specificity -&gt; Specificity -&gt; Bool) -&gt; Eq Specificity
forall a. (a -&gt; a -&gt; Bool) -&gt; (a -&gt; a -&gt; Bool) -&gt; Eq a
/= :: Specificity -&gt; Specificity -&gt; Bool
$c/= :: Specificity -&gt; Specificity -&gt; Bool
== :: Specificity -&gt; Specificity -&gt; Bool
$c== :: Specificity -&gt; Specificity -&gt; Bool
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var">Eq</span></span></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680807495"><span id="local-6989586621680807497"><span id="local-6989586621680807500"><span id="local-6989586621680807503"><span id="local-6989586621680807506"><span id="local-6989586621680807508"><span id="local-6989586621680807510"><span class="annot"><span class="annottext">Eq Specificity
Eq Specificity
-&gt; (Specificity -&gt; Specificity -&gt; Ordering)
-&gt; (Specificity -&gt; Specificity -&gt; Bool)
-&gt; (Specificity -&gt; Specificity -&gt; Bool)
-&gt; (Specificity -&gt; Specificity -&gt; Bool)
-&gt; (Specificity -&gt; Specificity -&gt; Bool)
-&gt; (Specificity -&gt; Specificity -&gt; Specificity)
-&gt; (Specificity -&gt; Specificity -&gt; Specificity)
-&gt; Ord Specificity
Specificity -&gt; Specificity -&gt; Bool
Specificity -&gt; Specificity -&gt; Ordering
Specificity -&gt; Specificity -&gt; Specificity
forall a.
Eq a
-&gt; (a -&gt; a -&gt; Ordering)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; a)
-&gt; (a -&gt; a -&gt; a)
-&gt; Ord a
min :: Specificity -&gt; Specificity -&gt; Specificity
$cmin :: Specificity -&gt; Specificity -&gt; Specificity
max :: Specificity -&gt; Specificity -&gt; Specificity
$cmax :: Specificity -&gt; Specificity -&gt; Specificity
&gt;= :: Specificity -&gt; Specificity -&gt; Bool
$c&gt;= :: Specificity -&gt; Specificity -&gt; Bool
&gt; :: Specificity -&gt; Specificity -&gt; Bool
$c&gt; :: Specificity -&gt; Specificity -&gt; Bool
&lt;= :: Specificity -&gt; Specificity -&gt; Bool
$c&lt;= :: Specificity -&gt; Specificity -&gt; Bool
&lt; :: Specificity -&gt; Specificity -&gt; Bool
$c&lt; :: Specificity -&gt; Specificity -&gt; Bool
compare :: Specificity -&gt; Specificity -&gt; Ordering
$ccompare :: Specificity -&gt; Specificity -&gt; Ordering
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Ord</span></span></span></span></span></span></span></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680807465"><span id="local-6989586621680807467"><span id="local-6989586621680807469"><span id="local-6989586621680807471"><span id="local-6989586621680807473"><span id="local-6989586621680807475"><span id="local-6989586621680807477"><span id="local-6989586621680807479"><span id="local-6989586621680807481"><span id="local-6989586621680807483"><span id="local-6989586621680807485"><span id="local-6989586621680807487"><span id="local-6989586621680807489"><span id="local-6989586621680807491"><span class="annot"><span class="annottext">Typeable Specificity
Typeable Specificity
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; Specificity -&gt; c Specificity)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c Specificity)
-&gt; (Specificity -&gt; Constr)
-&gt; (Specificity -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c Specificity))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e))
    -&gt; Maybe (c Specificity))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; Specificity -&gt; Specificity)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; [u])
-&gt; (forall u.
    Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity)
-&gt; Data Specificity
Specificity -&gt; DataType
Specificity -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; Specificity -&gt; Specificity
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c Specificity
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; Specificity -&gt; c Specificity
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c Specificity)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c Specificity)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; Specificity -&gt; m Specificity
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; Specificity -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; Specificity -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; Specificity -&gt; Specificity
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; Specificity -&gt; Specificity
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c Specificity)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c Specificity)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c Specificity)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c Specificity)
dataTypeOf :: Specificity -&gt; DataType
$cdataTypeOf :: Specificity -&gt; DataType
toConstr :: Specificity -&gt; Constr
$ctoConstr :: Specificity -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c Specificity
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c Specificity
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; Specificity -&gt; c Specificity
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; Specificity -&gt; c Specificity
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hs-special">)</span><span>
</span><span id="line-460"></span><span>
</span><span id="line-461"></span><span class="hs-keyword">pattern</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Inferred"><span class="hs-identifier hs-type">Inferred</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specified"><span class="hs-identifier hs-type">Specified</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span>
</span><span id="line-462"></span><span class="hs-keyword">pattern</span><span> </span><span id="%24mInferred"><span id="%24bInferred"><span id="Inferred"><span class="annot"><span class="annottext">$mInferred :: forall {r}. ArgFlag -&gt; (Void# -&gt; r) -&gt; (Void# -&gt; r) -&gt; r
$bInferred :: ArgFlag
</span><a href="GHC.Types.Var.html#%24mInferred"><span class="hs-identifier hs-var hs-var hs-var">Inferred</span></a></span></span></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier hs-type">Invisible</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#InferredSpec"><span class="hs-identifier hs-type">InferredSpec</span></a></span><span>
</span><span id="line-463"></span><span class="hs-keyword">pattern</span><span> </span><span id="%24mSpecified"><span id="%24bSpecified"><span id="Specified"><span class="annot"><span class="annottext">$mSpecified :: forall {r}. ArgFlag -&gt; (Void# -&gt; r) -&gt; (Void# -&gt; r) -&gt; r
$bSpecified :: ArgFlag
</span><a href="GHC.Types.Var.html#%24mSpecified"><span class="hs-identifier hs-var hs-var hs-var">Specified</span></a></span></span></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier hs-type">Invisible</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#SpecifiedSpec"><span class="hs-identifier hs-type">SpecifiedSpec</span></a></span><span>
</span><span id="line-464"></span><span>
</span><span id="line-465"></span><span class="hs-pragma">{-# COMPLETE</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Required"><span class="hs-pragma hs-type">Required</span></a></span><span class="hs-pragma">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specified"><span class="hs-pragma hs-type">Specified</span></a></span><span class="hs-pragma">,</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Inferred"><span class="hs-pragma hs-type">Inferred</span></a></span><span> </span><span class="hs-pragma">#-}</span><span>
</span><span id="line-466"></span><span>
</span><span id="line-467"></span><span class="hs-comment">-- | Does this 'ArgFlag' classify an argument that is written in Haskell?</span><span>
</span><span id="line-468"></span><span class="annot"><a href="GHC.Types.Var.html#isVisibleArgFlag"><span class="hs-identifier hs-type">isVisibleArgFlag</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-469"></span><span id="isVisibleArgFlag"><span class="annot"><span class="annottext">isVisibleArgFlag :: ArgFlag -&gt; Bool
</span><a href="GHC.Types.Var.html#isVisibleArgFlag"><span class="hs-identifier hs-var hs-var">isVisibleArgFlag</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-470"></span><span class="annot"><a href="GHC.Types.Var.html#isVisibleArgFlag"><span class="hs-identifier hs-var">isVisibleArgFlag</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><span class="hs-identifier">_</span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-471"></span><span>
</span><span id="line-472"></span><span class="hs-comment">-- | Does this 'ArgFlag' classify an argument that is not written in Haskell?</span><span>
</span><span id="line-473"></span><span class="annot"><a href="GHC.Types.Var.html#isInvisibleArgFlag"><span class="hs-identifier hs-type">isInvisibleArgFlag</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-474"></span><span id="isInvisibleArgFlag"><span class="annot"><span class="annottext">isInvisibleArgFlag :: ArgFlag -&gt; Bool
</span><a href="GHC.Types.Var.html#isInvisibleArgFlag"><span class="hs-identifier hs-var hs-var">isInvisibleArgFlag</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="annot"><span class="annottext">(Bool -&gt; Bool) -&gt; (ArgFlag -&gt; Bool) -&gt; ArgFlag -&gt; Bool
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag -&gt; Bool
</span><a href="GHC.Types.Var.html#isVisibleArgFlag"><span class="hs-identifier hs-var">isVisibleArgFlag</span></a></span><span>
</span><span id="line-475"></span><span>
</span><span id="line-476"></span><span class="hs-comment">-- | Do these denote the same level of visibility? 'Required'</span><span>
</span><span id="line-477"></span><span class="hs-comment">-- arguments are visible, others are not. So this function</span><span>
</span><span id="line-478"></span><span class="hs-comment">-- equates 'Specified' and 'Inferred'. Used for printing.</span><span>
</span><span id="line-479"></span><span class="annot"><a href="GHC.Types.Var.html#sameVis"><span class="hs-identifier hs-type">sameVis</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-480"></span><span id="sameVis"><span class="annot"><span class="annottext">sameVis :: ArgFlag -&gt; ArgFlag -&gt; Bool
</span><a href="GHC.Types.Var.html#sameVis"><span class="hs-identifier hs-var hs-var">sameVis</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span>      </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-481"></span><span class="annot"><a href="GHC.Types.Var.html#sameVis"><span class="hs-identifier hs-var">sameVis</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier hs-type">Invisible</span></a></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier hs-type">Invisible</span></a></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-482"></span><span class="annot"><a href="GHC.Types.Var.html#sameVis"><span class="hs-identifier hs-var">sameVis</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><span class="hs-identifier">_</span></span><span>             </span><span class="annot"><span class="annottext">ArgFlag
</span><span class="hs-identifier">_</span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-483"></span><span>
</span><span id="line-484"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807458"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-485"></span><span>  </span><span id="local-6989586621680807457"><span class="annot"><span class="annottext">ppr :: ArgFlag -&gt; SDoc
</span><a href="#local-6989586621680807457"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;[req]&quot;</span></span><span>
</span><span id="line-486"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Specified"><span class="hs-identifier hs-var">Specified</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;[spec]&quot;</span></span><span>
</span><span id="line-487"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Inferred"><span class="hs-identifier hs-var">Inferred</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;[infrd]&quot;</span></span><span>
</span><span id="line-488"></span><span>
</span><span id="line-489"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807454"><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-type">Specificity</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-490"></span><span>  </span><span id="local-6989586621680807448"><span class="annot"><span class="annottext">put_ :: BinHandle -&gt; Specificity -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var hs-var hs-var hs-var">put_</span></a></span></span><span> </span><span id="local-6989586621680807446"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807446"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><a href="GHC.Types.Var.html#SpecifiedSpec"><span class="hs-identifier hs-var">SpecifiedSpec</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807446"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">0</span></span><span>
</span><span id="line-491"></span><span>  </span><span class="annot"><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span id="local-6989586621680807444"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807444"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><a href="GHC.Types.Var.html#InferredSpec"><span class="hs-identifier hs-var">InferredSpec</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807444"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">1</span></span><span>
</span><span id="line-492"></span><span>
</span><span id="line-493"></span><span>  </span><span id="local-6989586621680807436"><span class="annot"><span class="annottext">get :: BinHandle -&gt; IO Specificity
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var hs-var hs-var hs-var">get</span></a></span></span><span> </span><span id="local-6989586621680807434"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807434"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-494"></span><span>    </span><span id="local-6989586621680807433"><span class="annot"><span class="annottext">Word8
</span><a href="#local-6989586621680807433"><span class="hs-identifier hs-var">h</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Word8
</span><a href="GHC.Utils.Binary.html#getByte"><span class="hs-identifier hs-var">getByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807434"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-495"></span><span>    </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Word8
</span><a href="#local-6989586621680807433"><span class="hs-identifier hs-var">h</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-496"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">0</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Specificity -&gt; IO Specificity
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><a href="GHC.Types.Var.html#SpecifiedSpec"><span class="hs-identifier hs-var">SpecifiedSpec</span></a></span><span>
</span><span id="line-497"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Specificity -&gt; IO Specificity
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><a href="GHC.Types.Var.html#InferredSpec"><span class="hs-identifier hs-var">InferredSpec</span></a></span><span>
</span><span id="line-498"></span><span>
</span><span id="line-499"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807429"><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-500"></span><span>  </span><span id="local-6989586621680807424"><span class="annot"><span class="annottext">put_ :: BinHandle -&gt; ArgFlag -&gt; IO ()
</span><a href="#local-6989586621680807424"><span class="hs-identifier hs-var hs-var hs-var hs-var">put_</span></a></span></span><span> </span><span id="local-6989586621680807423"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807423"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807423"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">0</span></span><span>
</span><span id="line-501"></span><span>  </span><span class="annot"><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span id="local-6989586621680807422"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807422"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Specified"><span class="hs-identifier hs-var">Specified</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807422"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">1</span></span><span>
</span><span id="line-502"></span><span>  </span><span class="annot"><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span id="local-6989586621680807421"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807421"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Inferred"><span class="hs-identifier hs-var">Inferred</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807421"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">2</span></span><span>
</span><span id="line-503"></span><span>
</span><span id="line-504"></span><span>  </span><span id="local-6989586621680807412"><span class="annot"><span class="annottext">get :: BinHandle -&gt; IO ArgFlag
</span><a href="#local-6989586621680807412"><span class="hs-identifier hs-var hs-var hs-var hs-var">get</span></a></span></span><span> </span><span id="local-6989586621680807411"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807411"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-505"></span><span>    </span><span id="local-6989586621680807410"><span class="annot"><span class="annottext">Word8
</span><a href="#local-6989586621680807410"><span class="hs-identifier hs-var">h</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Word8
</span><a href="GHC.Utils.Binary.html#getByte"><span class="hs-identifier hs-var">getByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807411"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-506"></span><span>    </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Word8
</span><a href="#local-6989586621680807410"><span class="hs-identifier hs-var">h</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-507"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">0</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">ArgFlag -&gt; IO ArgFlag
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span>
</span><span id="line-508"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">1</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">ArgFlag -&gt; IO ArgFlag
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Specified"><span class="hs-identifier hs-var">Specified</span></a></span><span>
</span><span id="line-509"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">ArgFlag -&gt; IO ArgFlag
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Inferred"><span class="hs-identifier hs-var">Inferred</span></a></span><span>
</span><span id="line-510"></span><span>
</span><span id="line-511"></span><span class="hs-comment">-- | The non-dependent version of 'ArgFlag'.</span><span>
</span><span id="line-512"></span><span class="hs-comment">-- See Note [AnonArgFlag]</span><span>
</span><span id="line-513"></span><span class="hs-comment">-- Appears here partly so that it's together with its friends ArgFlag</span><span>
</span><span id="line-514"></span><span class="hs-comment">-- and ForallVisFlag, but also because it is used in IfaceType, rather</span><span>
</span><span id="line-515"></span><span class="hs-comment">-- early in the compilation chain</span><span>
</span><span id="line-516"></span><span class="hs-keyword">data</span><span> </span><span id="AnonArgFlag"><span class="annot"><a href="GHC.Types.Var.html#AnonArgFlag"><span class="hs-identifier hs-var">AnonArgFlag</span></a></span></span><span>
</span><span id="line-517"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="VisArg"><span class="annot"><a href="GHC.Types.Var.html#VisArg"><span class="hs-identifier hs-var">VisArg</span></a></span></span><span>    </span><span class="hs-comment">-- ^ Used for @(-&gt;)@: an ordinary non-dependent arrow.</span><span>
</span><span id="line-518"></span><span>              </span><span class="hs-comment">--   The argument is visible in source code.</span><span>
</span><span id="line-519"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="InvisArg"><span class="annot"><a href="GHC.Types.Var.html#InvisArg"><span class="hs-identifier hs-var">InvisArg</span></a></span></span><span>  </span><span class="hs-comment">-- ^ Used for @(=&gt;)@: a non-dependent predicate arrow.</span><span>
</span><span id="line-520"></span><span>              </span><span class="hs-comment">--   The argument is invisible in source code.</span><span>
</span><span id="line-521"></span><span>  </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span id="local-6989586621680807404"><span id="local-6989586621680807406"><span class="annot"><span class="annottext">AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
(AnonArgFlag -&gt; AnonArgFlag -&gt; Bool)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; Bool) -&gt; Eq AnonArgFlag
forall a. (a -&gt; a -&gt; Bool) -&gt; (a -&gt; a -&gt; Bool) -&gt; Eq a
/= :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
$c/= :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
== :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
$c== :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var">Eq</span></span></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680807385"><span id="local-6989586621680807387"><span id="local-6989586621680807390"><span id="local-6989586621680807393"><span id="local-6989586621680807396"><span id="local-6989586621680807398"><span id="local-6989586621680807400"><span class="annot"><span class="annottext">Eq AnonArgFlag
Eq AnonArgFlag
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; Ordering)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; Bool)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; Bool)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; Bool)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; Bool)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag)
-&gt; (AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag)
-&gt; Ord AnonArgFlag
AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
AnonArgFlag -&gt; AnonArgFlag -&gt; Ordering
AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag
forall a.
Eq a
-&gt; (a -&gt; a -&gt; Ordering)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; Bool)
-&gt; (a -&gt; a -&gt; a)
-&gt; (a -&gt; a -&gt; a)
-&gt; Ord a
min :: AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag
$cmin :: AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag
max :: AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag
$cmax :: AnonArgFlag -&gt; AnonArgFlag -&gt; AnonArgFlag
&gt;= :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
$c&gt;= :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
&gt; :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
$c&gt; :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
&lt;= :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
$c&lt;= :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
&lt; :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
$c&lt; :: AnonArgFlag -&gt; AnonArgFlag -&gt; Bool
compare :: AnonArgFlag -&gt; AnonArgFlag -&gt; Ordering
$ccompare :: AnonArgFlag -&gt; AnonArgFlag -&gt; Ordering
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Ord</span></span></span></span></span></span></span></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680807355"><span id="local-6989586621680807357"><span id="local-6989586621680807359"><span id="local-6989586621680807361"><span id="local-6989586621680807363"><span id="local-6989586621680807365"><span id="local-6989586621680807367"><span id="local-6989586621680807369"><span id="local-6989586621680807371"><span id="local-6989586621680807373"><span id="local-6989586621680807375"><span id="local-6989586621680807377"><span id="local-6989586621680807379"><span id="local-6989586621680807381"><span class="annot"><span class="annottext">Typeable AnonArgFlag
Typeable AnonArgFlag
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; AnonArgFlag -&gt; c AnonArgFlag)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c AnonArgFlag)
-&gt; (AnonArgFlag -&gt; Constr)
-&gt; (AnonArgFlag -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c AnonArgFlag))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e))
    -&gt; Maybe (c AnonArgFlag))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; AnonArgFlag -&gt; AnonArgFlag)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; [u])
-&gt; (forall u.
    Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag)
-&gt; Data AnonArgFlag
AnonArgFlag -&gt; DataType
AnonArgFlag -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; AnonArgFlag -&gt; AnonArgFlag
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c AnonArgFlag
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; AnonArgFlag -&gt; c AnonArgFlag
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c AnonArgFlag)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c AnonArgFlag)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; AnonArgFlag -&gt; m AnonArgFlag
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; AnonArgFlag -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; AnonArgFlag -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; AnonArgFlag -&gt; AnonArgFlag
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; AnonArgFlag -&gt; AnonArgFlag
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c AnonArgFlag)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c AnonArgFlag)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c AnonArgFlag)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c AnonArgFlag)
dataTypeOf :: AnonArgFlag -&gt; DataType
$cdataTypeOf :: AnonArgFlag -&gt; DataType
toConstr :: AnonArgFlag -&gt; Constr
$ctoConstr :: AnonArgFlag -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c AnonArgFlag
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c AnonArgFlag
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; AnonArgFlag -&gt; c AnonArgFlag
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; AnonArgFlag -&gt; c AnonArgFlag
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hs-special">)</span><span>
</span><span id="line-522"></span><span>
</span><span id="line-523"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807352"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#AnonArgFlag"><span class="hs-identifier hs-type">AnonArgFlag</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-524"></span><span>  </span><span id="local-6989586621680807351"><span class="annot"><span class="annottext">ppr :: AnonArgFlag -&gt; SDoc
</span><a href="#local-6989586621680807351"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="annot"><span class="annottext">AnonArgFlag
</span><a href="GHC.Types.Var.html#VisArg"><span class="hs-identifier hs-var">VisArg</span></a></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;[vis]&quot;</span></span><span>
</span><span id="line-525"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">AnonArgFlag
</span><a href="GHC.Types.Var.html#InvisArg"><span class="hs-identifier hs-var">InvisArg</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;[invis]&quot;</span></span><span>
</span><span id="line-526"></span><span>
</span><span id="line-527"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807348"><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#AnonArgFlag"><span class="hs-identifier hs-type">AnonArgFlag</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-528"></span><span>  </span><span id="local-6989586621680807344"><span class="annot"><span class="annottext">put_ :: BinHandle -&gt; AnonArgFlag -&gt; IO ()
</span><a href="#local-6989586621680807344"><span class="hs-identifier hs-var hs-var hs-var hs-var">put_</span></a></span></span><span> </span><span id="local-6989586621680807343"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807343"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">AnonArgFlag
</span><a href="GHC.Types.Var.html#VisArg"><span class="hs-identifier hs-var">VisArg</span></a></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807343"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">0</span></span><span>
</span><span id="line-529"></span><span>  </span><span class="annot"><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span id="local-6989586621680807342"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807342"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="annot"><span class="annottext">AnonArgFlag
</span><a href="GHC.Types.Var.html#InvisArg"><span class="hs-identifier hs-var">InvisArg</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word8 -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putByte"><span class="hs-identifier hs-var">putByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807342"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">1</span></span><span>
</span><span id="line-530"></span><span>
</span><span id="line-531"></span><span>  </span><span id="local-6989586621680807336"><span class="annot"><span class="annottext">get :: BinHandle -&gt; IO AnonArgFlag
</span><a href="#local-6989586621680807336"><span class="hs-identifier hs-var hs-var hs-var hs-var">get</span></a></span></span><span> </span><span id="local-6989586621680807335"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807335"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-532"></span><span>    </span><span id="local-6989586621680807334"><span class="annot"><span class="annottext">Word8
</span><a href="#local-6989586621680807334"><span class="hs-identifier hs-var">h</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Word8
</span><a href="GHC.Utils.Binary.html#getByte"><span class="hs-identifier hs-var">getByte</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807335"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-533"></span><span>    </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Word8
</span><a href="#local-6989586621680807334"><span class="hs-identifier hs-var">h</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-534"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-number">0</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">AnonArgFlag -&gt; IO AnonArgFlag
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">AnonArgFlag
</span><a href="GHC.Types.Var.html#VisArg"><span class="hs-identifier hs-var">VisArg</span></a></span><span>
</span><span id="line-535"></span><span>      </span><span class="annot"><span class="annottext">Word8
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">AnonArgFlag -&gt; IO AnonArgFlag
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">AnonArgFlag
</span><a href="GHC.Types.Var.html#InvisArg"><span class="hs-identifier hs-var">InvisArg</span></a></span><span>
</span><span id="line-536"></span><span>
</span><span id="line-537"></span><span class="hs-comment">{- Note [AnonArgFlag]
~~~~~~~~~~~~~~~~~~~~~
AnonArgFlag is used principally in the FunTy constructor of Type.
  FunTy VisArg   t1 t2   means   t1 -&gt; t2
  FunTy InvisArg t1 t2   means   t1 =&gt; t2

However, the AnonArgFlag in a FunTy is just redundant, cached
information.  In (FunTy { ft_af = af, ft_arg = t1, ft_res = t2 })
  * if (isPredTy t1 = True)  then af = InvisArg
  * if (isPredTy t1 = False) then af = VisArg
where isPredTy is defined in GHC.Core.Type, and sees if t1's
kind is Constraint.  See GHC.Core.TyCo.Rep
Note [Types for coercions, predicates, and evidence]

GHC.Core.Utils.mkFunctionType :: Mult -&gt; Type -&gt; Type -&gt; Type
uses isPredTy to decide the AnonArgFlag for the FunTy.

The term (Lam b e), and coercion (FunCo co1 co2) don't carry
AnonArgFlags; instead they use mkFunctionType when we want to
get their types; see mkLamType and coercionLKind/RKind resp.
This is just an engineering choice; we could cache here too
if we wanted.

Why bother with all this? After all, we are in Core, where (=&gt;) and
(-&gt;) behave the same.  We maintain this distinction throughout Core so
that we can cheaply and conveniently determine
* How to print a type
* How to split up a type: tcSplitSigmaTy
* How to specialise it (over type classes; GHC.Core.Opt.Specialise)

For the specialisation point, consider
(\ (d :: Ord a). blah).  We want to give it type
           (Ord a =&gt; blah_ty)
with a fat arrow; that is, using mkInvisFunTy, not mkVisFunTy.
Why?  Because the /specialiser/ treats dictionary arguments specially.
Suppose we do w/w on 'foo', thus (#11272, #6056)
   foo :: Ord a =&gt; Int -&gt; blah
   foo a d x = case x of I# x' -&gt; $wfoo @a d x'

   $wfoo :: Ord a =&gt; Int# -&gt; blah

Now, at a call we see (foo @Int dOrdInt).  The specialiser will
specialise this to $sfoo, where
   $sfoo :: Int -&gt; blah
   $sfoo x = case x of I# x' -&gt; $wfoo @Int dOrdInt x'

Now we /must/ also specialise $wfoo!  But it wasn't user-written,
and has a type built with mkLamTypes.

Conclusion: the easiest thing is to make mkLamType build
            (c =&gt; ty)
when the argument is a predicate type.  See GHC.Core.TyCo.Rep
Note [Types for coercions, predicates, and evidence]
-}</span><span>
</span><span id="line-591"></span><span>
</span><span id="line-592"></span><span class="hs-comment">{- *********************************************************************
*                                                                      *
*                   VarBndr, TyCoVarBinder
*                                                                      *
********************************************************************* -}</span><span>
</span><span id="line-597"></span><span>
</span><span id="line-598"></span><span class="hs-comment">-- Variable Binder</span><span>
</span><span id="line-599"></span><span class="hs-comment">--</span><span>
</span><span id="line-600"></span><span class="hs-comment">-- VarBndr is polymorphic in both var and visibility fields.</span><span>
</span><span id="line-601"></span><span class="hs-comment">-- Currently there are nine different uses of 'VarBndr':</span><span>
</span><span id="line-602"></span><span class="hs-comment">--   * Var.TyVarBinder               = VarBndr TyVar ArgFlag</span><span>
</span><span id="line-603"></span><span class="hs-comment">--   * Var.TyCoVarBinder             = VarBndr TyCoVar ArgFlag</span><span>
</span><span id="line-604"></span><span class="hs-comment">--   * Var.InvisTVBinder             = VarBndr TyVar Specificity</span><span>
</span><span id="line-605"></span><span class="hs-comment">--   * Var.ReqTVBinder               = VarBndr TyVar ()</span><span>
</span><span id="line-606"></span><span class="hs-comment">--   * TyCon.TyConBinder             = VarBndr TyVar TyConBndrVis</span><span>
</span><span id="line-607"></span><span class="hs-comment">--   * TyCon.TyConTyCoBinder         = VarBndr TyCoVar TyConBndrVis</span><span>
</span><span id="line-608"></span><span class="hs-comment">--   * IfaceType.IfaceForAllBndr     = VarBndr IfaceBndr ArgFlag</span><span>
</span><span id="line-609"></span><span class="hs-comment">--   * IfaceType.IfaceTyConBinder    = VarBndr IfaceBndr TyConBndrVis</span><span>
</span><span id="line-610"></span><span class="hs-comment">--   * IfaceType.IfaceForAllSpecBndr = VarBndr IfaceBndr Specificity</span><span>
</span><span id="line-611"></span><span class="hs-keyword">data</span><span> </span><span id="VarBndr"><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-var">VarBndr</span></a></span></span><span> </span><span id="local-6989586621680808106"><span class="annot"><a href="#local-6989586621680808106"><span class="hs-identifier hs-type">var</span></a></span></span><span> </span><span id="local-6989586621680808105"><span class="annot"><a href="#local-6989586621680808105"><span class="hs-identifier hs-type">argf</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="Bndr"><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-var">Bndr</span></a></span></span><span> </span><span class="annot"><a href="#local-6989586621680808106"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808105"><span class="hs-identifier hs-type">argf</span></a></span><span>
</span><span id="line-612"></span><span>  </span><span class="hs-keyword">deriving</span><span class="hs-special">(</span><span> </span><span id="local-6989586621680807293"><span id="local-6989586621680807295"><span id="local-6989586621680807297"><span id="local-6989586621680807299"><span id="local-6989586621680807301"><span id="local-6989586621680807303"><span id="local-6989586621680807305"><span id="local-6989586621680807307"><span id="local-6989586621680807314"><span id="local-6989586621680807316"><span id="local-6989586621680807318"><span id="local-6989586621680807320"><span id="local-6989586621680807324"><span id="local-6989586621680807328"><span class="annot"><span class="annottext">Typeable (VarBndr var argf)
Typeable (VarBndr var argf)
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g)
    -&gt; VarBndr var argf
    -&gt; c (VarBndr var argf))
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c (VarBndr var argf))
-&gt; (VarBndr var argf -&gt; Constr)
-&gt; (VarBndr var argf -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c (VarBndr var argf)))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e))
    -&gt; Maybe (c (VarBndr var argf)))
-&gt; ((forall b. Data b =&gt; b -&gt; b)
    -&gt; VarBndr var argf -&gt; VarBndr var argf)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r)
-&gt; (forall u.
    (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; [u])
-&gt; (forall u.
    Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d)
    -&gt; VarBndr var argf -&gt; m (VarBndr var argf))
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d)
    -&gt; VarBndr var argf -&gt; m (VarBndr var argf))
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d)
    -&gt; VarBndr var argf -&gt; m (VarBndr var argf))
-&gt; Data (VarBndr var argf)
VarBndr var argf -&gt; DataType
VarBndr var argf -&gt; Constr
(forall b. Data b =&gt; b -&gt; b)
-&gt; VarBndr var argf -&gt; VarBndr var argf
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u.
Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; [u]
forall {var} {argf}.
(Data var, Data argf) =&gt;
Typeable (VarBndr var argf)
forall var argf.
(Data var, Data argf) =&gt;
VarBndr var argf -&gt; DataType
forall var argf.
(Data var, Data argf) =&gt;
VarBndr var argf -&gt; Constr
forall var argf.
(Data var, Data argf) =&gt;
(forall b. Data b =&gt; b -&gt; b)
-&gt; VarBndr var argf -&gt; VarBndr var argf
forall var argf u.
(Data var, Data argf) =&gt;
Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; u
forall var argf u.
(Data var, Data argf) =&gt;
(forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; [u]
forall var argf r r'.
(Data var, Data argf) =&gt;
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
forall var argf r r'.
(Data var, Data argf) =&gt;
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
forall var argf (m :: * -&gt; *).
(Data var, Data argf, Monad m) =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
forall var argf (m :: * -&gt; *).
(Data var, Data argf, MonadPlus m) =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
forall var argf (c :: * -&gt; *).
(Data var, Data argf) =&gt;
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c (VarBndr var argf)
forall var argf (c :: * -&gt; *).
(Data var, Data argf) =&gt;
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; VarBndr var argf -&gt; c (VarBndr var argf)
forall var argf (t :: * -&gt; *) (c :: * -&gt; *).
(Data var, Data argf, Typeable t) =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c (VarBndr var argf))
forall var argf (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
(Data var, Data argf, Typeable t) =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c (VarBndr var argf))
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c (VarBndr var argf)
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; VarBndr var argf -&gt; c (VarBndr var argf)
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c (VarBndr var argf))
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c (VarBndr var argf))
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
$cgmapMo :: forall var argf (m :: * -&gt; *).
(Data var, Data argf, MonadPlus m) =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
$cgmapMp :: forall var argf (m :: * -&gt; *).
(Data var, Data argf, MonadPlus m) =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
$cgmapM :: forall var argf (m :: * -&gt; *).
(Data var, Data argf, Monad m) =&gt;
(forall d. Data d =&gt; d -&gt; m d)
-&gt; VarBndr var argf -&gt; m (VarBndr var argf)
gmapQi :: forall u.
Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; u
$cgmapQi :: forall var argf u.
(Data var, Data argf) =&gt;
Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; [u]
$cgmapQ :: forall var argf u.
(Data var, Data argf) =&gt;
(forall d. Data d =&gt; d -&gt; u) -&gt; VarBndr var argf -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
$cgmapQr :: forall var argf r r'.
(Data var, Data argf) =&gt;
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
$cgmapQl :: forall var argf r r'.
(Data var, Data argf) =&gt;
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; VarBndr var argf -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b)
-&gt; VarBndr var argf -&gt; VarBndr var argf
$cgmapT :: forall var argf.
(Data var, Data argf) =&gt;
(forall b. Data b =&gt; b -&gt; b)
-&gt; VarBndr var argf -&gt; VarBndr var argf
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c (VarBndr var argf))
$cdataCast2 :: forall var argf (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
(Data var, Data argf, Typeable t) =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c (VarBndr var argf))
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c (VarBndr var argf))
$cdataCast1 :: forall var argf (t :: * -&gt; *) (c :: * -&gt; *).
(Data var, Data argf, Typeable t) =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c (VarBndr var argf))
dataTypeOf :: VarBndr var argf -&gt; DataType
$cdataTypeOf :: forall var argf.
(Data var, Data argf) =&gt;
VarBndr var argf -&gt; DataType
toConstr :: VarBndr var argf -&gt; Constr
$ctoConstr :: forall var argf.
(Data var, Data argf) =&gt;
VarBndr var argf -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c (VarBndr var argf)
$cgunfold :: forall var argf (c :: * -&gt; *).
(Data var, Data argf) =&gt;
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c (VarBndr var argf)
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; VarBndr var argf -&gt; c (VarBndr var argf)
$cgfoldl :: forall var argf (c :: * -&gt; *).
(Data var, Data argf) =&gt;
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; VarBndr var argf -&gt; c (VarBndr var argf)
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-613"></span><span>
</span><span id="line-614"></span><span class="hs-comment">-- | Variable Binder</span><span>
</span><span id="line-615"></span><span class="hs-comment">--</span><span>
</span><span id="line-616"></span><span class="hs-comment">-- A 'TyCoVarBinder' is the binder of a ForAllTy</span><span>
</span><span id="line-617"></span><span class="hs-comment">-- It's convenient to define this synonym here rather its natural</span><span>
</span><span id="line-618"></span><span class="hs-comment">-- home in &quot;GHC.Core.TyCo.Rep&quot;, because it's used in GHC.Core.DataCon.hs-boot</span><span>
</span><span id="line-619"></span><span class="hs-comment">--</span><span>
</span><span id="line-620"></span><span class="hs-comment">-- A 'TyVarBinder' is a binder with only TyVar</span><span>
</span><span id="line-621"></span><span class="hs-keyword">type</span><span> </span><span id="TyCoVarBinder"><span class="annot"><a href="GHC.Types.Var.html#TyCoVarBinder"><span class="hs-identifier hs-var">TyCoVarBinder</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-type">TyCoVar</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span>
</span><span id="line-622"></span><span class="hs-keyword">type</span><span> </span><span id="TyVarBinder"><span class="annot"><a href="GHC.Types.Var.html#TyVarBinder"><span class="hs-identifier hs-var">TyVarBinder</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>   </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span>
</span><span id="line-623"></span><span class="hs-keyword">type</span><span> </span><span id="InvisTVBinder"><span class="annot"><a href="GHC.Types.Var.html#InvisTVBinder"><span class="hs-identifier hs-var">InvisTVBinder</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>   </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-type">Specificity</span></a></span><span>
</span><span id="line-624"></span><span class="hs-keyword">type</span><span> </span><span id="ReqTVBinder"><span class="annot"><a href="GHC.Types.Var.html#ReqTVBinder"><span class="hs-identifier hs-var">ReqTVBinder</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>   </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-625"></span><span>
</span><span id="line-626"></span><span id="local-6989586621680808104"><span class="annot"><a href="GHC.Types.Var.html#tyVarSpecToBinders"><span class="hs-identifier hs-type">tyVarSpecToBinders</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808104"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-type">Specificity</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808104"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span class="hs-special">]</span></span><span>
</span><span id="line-627"></span><span id="tyVarSpecToBinders"><span class="annot"><span class="annottext">tyVarSpecToBinders :: forall a. [VarBndr a Specificity] -&gt; [VarBndr a ArgFlag]
</span><a href="GHC.Types.Var.html#tyVarSpecToBinders"><span class="hs-identifier hs-var hs-var">tyVarSpecToBinders</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(VarBndr a Specificity -&gt; VarBndr a ArgFlag)
-&gt; [VarBndr a Specificity] -&gt; [VarBndr a ArgFlag]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">VarBndr a Specificity -&gt; VarBndr a ArgFlag
forall a. VarBndr a Specificity -&gt; VarBndr a ArgFlag
</span><a href="GHC.Types.Var.html#tyVarSpecToBinder"><span class="hs-identifier hs-var">tyVarSpecToBinder</span></a></span><span>
</span><span id="line-628"></span><span>
</span><span id="line-629"></span><span id="local-6989586621680808100"><span class="annot"><a href="GHC.Types.Var.html#tyVarSpecToBinder"><span class="hs-identifier hs-type">tyVarSpecToBinder</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808100"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-type">Specificity</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808100"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-630"></span><span id="tyVarSpecToBinder"><span class="annot"><span class="annottext">tyVarSpecToBinder :: forall a. VarBndr a Specificity -&gt; VarBndr a ArgFlag
</span><a href="GHC.Types.Var.html#tyVarSpecToBinder"><span class="hs-identifier hs-var hs-var">tyVarSpecToBinder</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807291"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680807291"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span id="local-6989586621680807290"><span class="annot"><span class="annottext">Specificity
</span><a href="#local-6989586621680807290"><span class="hs-identifier hs-var">vis</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">a -&gt; ArgFlag -&gt; VarBndr a ArgFlag
forall var argf. var -&gt; argf -&gt; VarBndr var argf
</span><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-var">Bndr</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680807291"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Specificity -&gt; ArgFlag
</span><a href="GHC.Types.Var.html#Invisible"><span class="hs-identifier hs-var">Invisible</span></a></span><span> </span><span class="annot"><span class="annottext">Specificity
</span><a href="#local-6989586621680807290"><span class="hs-identifier hs-var">vis</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-631"></span><span>
</span><span id="line-632"></span><span id="local-6989586621680808097"><span id="local-6989586621680808098"><span class="annot"><a href="GHC.Types.Var.html#binderVar"><span class="hs-identifier hs-type">binderVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808098"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808097"><span class="hs-identifier hs-type">argf</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808098"><span class="hs-identifier hs-type">tv</span></a></span></span></span><span>
</span><span id="line-633"></span><span id="binderVar"><span class="annot"><span class="annottext">binderVar :: forall tv argf. VarBndr tv argf -&gt; tv
</span><a href="GHC.Types.Var.html#binderVar"><span class="hs-identifier hs-var hs-var">binderVar</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807289"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807289"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="annot"><span class="annottext">argf
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807289"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-634"></span><span>
</span><span id="line-635"></span><span id="local-6989586621680808093"><span id="local-6989586621680808094"><span class="annot"><a href="GHC.Types.Var.html#binderVars"><span class="hs-identifier hs-type">binderVars</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808094"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808093"><span class="hs-identifier hs-type">argf</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="#local-6989586621680808094"><span class="hs-identifier hs-type">tv</span></a></span><span class="hs-special">]</span></span></span><span>
</span><span id="line-636"></span><span id="binderVars"><span class="annot"><span class="annottext">binderVars :: forall tv argf. [VarBndr tv argf] -&gt; [tv]
</span><a href="GHC.Types.Var.html#binderVars"><span class="hs-identifier hs-var hs-var">binderVars</span></a></span></span><span> </span><span id="local-6989586621680807288"><span class="annot"><span class="annottext">[VarBndr tv argf]
</span><a href="#local-6989586621680807288"><span class="hs-identifier hs-var">tvbs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(VarBndr tv argf -&gt; tv) -&gt; [VarBndr tv argf] -&gt; [tv]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">VarBndr tv argf -&gt; tv
forall tv argf. VarBndr tv argf -&gt; tv
</span><a href="GHC.Types.Var.html#binderVar"><span class="hs-identifier hs-var">binderVar</span></a></span><span> </span><span class="annot"><span class="annottext">[VarBndr tv argf]
</span><a href="#local-6989586621680807288"><span class="hs-identifier hs-var">tvbs</span></a></span><span>
</span><span id="line-637"></span><span>
</span><span id="line-638"></span><span id="local-6989586621680808089"><span id="local-6989586621680808090"><span class="annot"><a href="GHC.Types.Var.html#binderArgFlag"><span class="hs-identifier hs-type">binderArgFlag</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808090"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808089"><span class="hs-identifier hs-type">argf</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808089"><span class="hs-identifier hs-type">argf</span></a></span></span></span><span>
</span><span id="line-639"></span><span id="binderArgFlag"><span class="annot"><span class="annottext">binderArgFlag :: forall tv argf. VarBndr tv argf -&gt; argf
</span><a href="GHC.Types.Var.html#binderArgFlag"><span class="hs-identifier hs-var hs-var">binderArgFlag</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680807287"><span class="annot"><span class="annottext">argf
</span><a href="#local-6989586621680807287"><span class="hs-identifier hs-var">argf</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">argf
</span><a href="#local-6989586621680807287"><span class="hs-identifier hs-var">argf</span></a></span><span>
</span><span id="line-640"></span><span>
</span><span id="line-641"></span><span id="local-6989586621680808086"><span class="annot"><a href="GHC.Types.Var.html#binderType"><span class="hs-identifier hs-type">binderType</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-type">TyCoVar</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808086"><span class="hs-identifier hs-type">argf</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span></span><span>
</span><span id="line-642"></span><span id="binderType"><span class="annot"><span class="annottext">binderType :: forall argf. VarBndr Var argf -&gt; Mult
</span><a href="GHC.Types.Var.html#binderType"><span class="hs-identifier hs-var hs-var">binderType</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807286"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807286"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span class="annot"><span class="annottext">argf
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var hs-var">varType</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807286"><span class="hs-identifier hs-var">tv</span></a></span><span>
</span><span id="line-643"></span><span>
</span><span id="line-644"></span><span class="hs-comment">-- | Make a named binder</span><span>
</span><span id="line-645"></span><span id="local-6989586621680808084"><span class="annot"><a href="GHC.Types.Var.html#mkTyCoVarBinder"><span class="hs-identifier hs-type">mkTyCoVarBinder</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="#local-6989586621680808084"><span class="hs-identifier hs-type">vis</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-type">TyCoVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-type">TyCoVar</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808084"><span class="hs-identifier hs-type">vis</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-646"></span><span id="mkTyCoVarBinder"><span class="annot"><span class="annottext">mkTyCoVarBinder :: forall vis. vis -&gt; Var -&gt; VarBndr Var vis
</span><a href="GHC.Types.Var.html#mkTyCoVarBinder"><span class="hs-identifier hs-var hs-var">mkTyCoVarBinder</span></a></span></span><span> </span><span id="local-6989586621680807285"><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807285"><span class="hs-identifier hs-var">vis</span></a></span></span><span> </span><span id="local-6989586621680807284"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807284"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; vis -&gt; VarBndr Var vis
forall var argf. var -&gt; argf -&gt; VarBndr var argf
</span><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-var">Bndr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807284"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807285"><span class="hs-identifier hs-var">vis</span></a></span><span>
</span><span id="line-647"></span><span>
</span><span id="line-648"></span><span class="hs-comment">-- | Make a named binder</span><span>
</span><span id="line-649"></span><span class="hs-comment">-- 'var' should be a type variable</span><span>
</span><span id="line-650"></span><span id="local-6989586621680807283"><span class="annot"><a href="GHC.Types.Var.html#mkTyVarBinder"><span class="hs-identifier hs-type">mkTyVarBinder</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="#local-6989586621680807283"><span class="hs-identifier hs-type">vis</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680807283"><span class="hs-identifier hs-type">vis</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-651"></span><span id="mkTyVarBinder"><span class="annot"><span class="annottext">mkTyVarBinder :: forall vis. vis -&gt; Var -&gt; VarBndr Var vis
</span><a href="GHC.Types.Var.html#mkTyVarBinder"><span class="hs-identifier hs-var hs-var">mkTyVarBinder</span></a></span></span><span> </span><span id="local-6989586621680807282"><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807282"><span class="hs-identifier hs-var">vis</span></a></span></span><span> </span><span id="local-6989586621680807281"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807281"><span class="hs-identifier hs-var">var</span></a></span></span><span>
</span><span id="line-652"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier">ASSERT</span><span class="hs-special">(</span><span> </span><span class="hs-identifier">isTyVar</span><span> </span><span class="hs-identifier">var</span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-653"></span><span>    </span><span class="annot"><span class="annottext">Var -&gt; vis -&gt; VarBndr Var vis
forall var argf. var -&gt; argf -&gt; VarBndr var argf
</span><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-var">Bndr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807281"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807282"><span class="hs-identifier hs-var">vis</span></a></span><span>
</span><span id="line-654"></span><span>
</span><span id="line-655"></span><span class="hs-comment">-- | Make many named binders</span><span>
</span><span id="line-656"></span><span id="local-6989586621680808081"><span class="annot"><a href="GHC.Types.Var.html#mkTyCoVarBinders"><span class="hs-identifier hs-type">mkTyCoVarBinders</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="#local-6989586621680808081"><span class="hs-identifier hs-type">vis</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-type">TyCoVar</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVar"><span class="hs-identifier hs-type">TyCoVar</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808081"><span class="hs-identifier hs-type">vis</span></a></span><span class="hs-special">]</span></span><span>
</span><span id="line-657"></span><span id="mkTyCoVarBinders"><span class="annot"><span class="annottext">mkTyCoVarBinders :: forall vis. vis -&gt; [Var] -&gt; [VarBndr Var vis]
</span><a href="GHC.Types.Var.html#mkTyCoVarBinders"><span class="hs-identifier hs-var hs-var">mkTyCoVarBinders</span></a></span></span><span> </span><span id="local-6989586621680807280"><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807280"><span class="hs-identifier hs-var">vis</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Var -&gt; VarBndr Var vis) -&gt; [Var] -&gt; [VarBndr Var vis]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">vis -&gt; Var -&gt; VarBndr Var vis
forall vis. vis -&gt; Var -&gt; VarBndr Var vis
</span><a href="GHC.Types.Var.html#mkTyCoVarBinder"><span class="hs-identifier hs-var">mkTyCoVarBinder</span></a></span><span> </span><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807280"><span class="hs-identifier hs-var">vis</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-658"></span><span>
</span><span id="line-659"></span><span class="hs-comment">-- | Make many named binders</span><span>
</span><span id="line-660"></span><span class="hs-comment">-- Input vars should be type variables</span><span>
</span><span id="line-661"></span><span id="local-6989586621680807279"><span class="annot"><a href="GHC.Types.Var.html#mkTyVarBinders"><span class="hs-identifier hs-type">mkTyVarBinders</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="#local-6989586621680807279"><span class="hs-identifier hs-type">vis</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680807279"><span class="hs-identifier hs-type">vis</span></a></span><span class="hs-special">]</span></span><span>
</span><span id="line-662"></span><span id="mkTyVarBinders"><span class="annot"><span class="annottext">mkTyVarBinders :: forall vis. vis -&gt; [Var] -&gt; [VarBndr Var vis]
</span><a href="GHC.Types.Var.html#mkTyVarBinders"><span class="hs-identifier hs-var hs-var">mkTyVarBinders</span></a></span></span><span> </span><span id="local-6989586621680807278"><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807278"><span class="hs-identifier hs-var">vis</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Var -&gt; VarBndr Var vis) -&gt; [Var] -&gt; [VarBndr Var vis]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">vis -&gt; Var -&gt; VarBndr Var vis
forall vis. vis -&gt; Var -&gt; VarBndr Var vis
</span><a href="GHC.Types.Var.html#mkTyVarBinder"><span class="hs-identifier hs-var">mkTyVarBinder</span></a></span><span> </span><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807278"><span class="hs-identifier hs-var">vis</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-663"></span><span>
</span><span id="line-664"></span><span class="annot"><a href="GHC.Types.Var.html#isTyVarBinder"><span class="hs-identifier hs-type">isTyVarBinder</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyCoVarBinder"><span class="hs-identifier hs-type">TyCoVarBinder</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-665"></span><span id="isTyVarBinder"><span class="annot"><span class="annottext">isTyVarBinder :: TyCoVarBinder -&gt; Bool
</span><a href="GHC.Types.Var.html#isTyVarBinder"><span class="hs-identifier hs-var hs-var">isTyVarBinder</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807277"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807277"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier hs-var">isTyVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807277"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-666"></span><span>
</span><span id="line-667"></span><span id="local-6989586621680808075"><span id="local-6989586621680808076"><span id="local-6989586621680808077"><span class="annot"><a href="GHC.Types.Var.html#mapVarBndr"><span class="hs-identifier hs-type">mapVarBndr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621680808077"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808076"><span class="hs-identifier hs-type">var'</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808077"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808075"><span class="hs-identifier hs-type">flag</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808076"><span class="hs-identifier hs-type">var'</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808075"><span class="hs-identifier hs-type">flag</span></a></span><span class="hs-special">)</span></span></span></span><span>
</span><span id="line-668"></span><span id="mapVarBndr"><span class="annot"><span class="annottext">mapVarBndr :: forall var var' flag.
(var -&gt; var') -&gt; VarBndr var flag -&gt; VarBndr var' flag
</span><a href="GHC.Types.Var.html#mapVarBndr"><span class="hs-identifier hs-var hs-var">mapVarBndr</span></a></span></span><span> </span><span id="local-6989586621680807276"><span class="annot"><span class="annottext">var -&gt; var'
</span><a href="#local-6989586621680807276"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807275"><span class="annot"><span class="annottext">var
</span><a href="#local-6989586621680807275"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span id="local-6989586621680807274"><span class="annot"><span class="annottext">flag
</span><a href="#local-6989586621680807274"><span class="hs-identifier hs-var">fl</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">var' -&gt; flag -&gt; VarBndr var' flag
forall var argf. var -&gt; argf -&gt; VarBndr var argf
</span><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-var">Bndr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">var -&gt; var'
</span><a href="#local-6989586621680807276"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">var
</span><a href="#local-6989586621680807275"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">flag
</span><a href="#local-6989586621680807274"><span class="hs-identifier hs-var">fl</span></a></span><span>
</span><span id="line-669"></span><span>
</span><span id="line-670"></span><span id="local-6989586621680808069"><span id="local-6989586621680808070"><span id="local-6989586621680808071"><span class="annot"><a href="GHC.Types.Var.html#mapVarBndrs"><span class="hs-identifier hs-type">mapVarBndrs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621680808071"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808070"><span class="hs-identifier hs-type">var'</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808071"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808069"><span class="hs-identifier hs-type">flag</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808070"><span class="hs-identifier hs-type">var'</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808069"><span class="hs-identifier hs-type">flag</span></a></span><span class="hs-special">]</span></span></span></span><span>
</span><span id="line-671"></span><span id="mapVarBndrs"><span class="annot"><span class="annottext">mapVarBndrs :: forall var var' flag.
(var -&gt; var') -&gt; [VarBndr var flag] -&gt; [VarBndr var' flag]
</span><a href="GHC.Types.Var.html#mapVarBndrs"><span class="hs-identifier hs-var hs-var">mapVarBndrs</span></a></span></span><span> </span><span id="local-6989586621680807273"><span class="annot"><span class="annottext">var -&gt; var'
</span><a href="#local-6989586621680807273"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(VarBndr var flag -&gt; VarBndr var' flag)
-&gt; [VarBndr var flag] -&gt; [VarBndr var' flag]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(var -&gt; var') -&gt; VarBndr var flag -&gt; VarBndr var' flag
forall var var' flag.
(var -&gt; var') -&gt; VarBndr var flag -&gt; VarBndr var' flag
</span><a href="GHC.Types.Var.html#mapVarBndr"><span class="hs-identifier hs-var">mapVarBndr</span></a></span><span> </span><span class="annot"><span class="annottext">var -&gt; var'
</span><a href="#local-6989586621680807273"><span class="hs-identifier hs-var">f</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-672"></span><span>
</span><span id="line-673"></span><span id="local-6989586621680808064"><span id="local-6989586621680808065"><span class="annot"><a href="GHC.Types.Var.html#lookupVarBndr"><span class="hs-identifier hs-type">lookupVarBndr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Eq</span></span><span> </span><span class="annot"><a href="#local-6989586621680808065"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680808065"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808065"><span class="hs-identifier hs-type">var</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808064"><span class="hs-identifier hs-type">flag</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808064"><span class="hs-identifier hs-type">flag</span></a></span></span></span><span>
</span><span id="line-674"></span><span id="lookupVarBndr"><span class="annot"><span class="annottext">lookupVarBndr :: forall var flag. Eq var =&gt; var -&gt; [VarBndr var flag] -&gt; Maybe flag
</span><a href="GHC.Types.Var.html#lookupVarBndr"><span class="hs-identifier hs-var hs-var">lookupVarBndr</span></a></span></span><span> </span><span id="local-6989586621680807270"><span class="annot"><span class="annottext">var
</span><a href="#local-6989586621680807270"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span id="local-6989586621680807269"><span class="annot"><span class="annottext">[VarBndr var flag]
</span><a href="#local-6989586621680807269"><span class="hs-identifier hs-var">bndrs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">var -&gt; [(var, flag)] -&gt; Maybe flag
forall a b. Eq a =&gt; a -&gt; [(a, b)] -&gt; Maybe b
</span><a href="../../base/src/GHC.List.html#lookup"><span class="hs-identifier hs-var">lookup</span></a></span><span> </span><span class="annot"><span class="annottext">var
</span><a href="#local-6989586621680807270"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="annot"><span class="annottext">[(var, flag)]
</span><a href="#local-6989586621680807267"><span class="hs-identifier hs-var">zipped_bndrs</span></a></span><span>
</span><span id="line-675"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-676"></span><span>    </span><span id="local-6989586621680807267"><span class="annot"><span class="annottext">zipped_bndrs :: [(var, flag)]
</span><a href="#local-6989586621680807267"><span class="hs-identifier hs-var hs-var">zipped_bndrs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(VarBndr var flag -&gt; (var, flag))
-&gt; [VarBndr var flag] -&gt; [(var, flag)]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807266"><span class="annot"><span class="annottext">var
</span><a href="#local-6989586621680807266"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span id="local-6989586621680807265"><span class="annot"><span class="annottext">flag
</span><a href="#local-6989586621680807265"><span class="hs-identifier hs-var">f</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">var
</span><a href="#local-6989586621680807266"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">flag
</span><a href="#local-6989586621680807265"><span class="hs-identifier hs-var">f</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[VarBndr var flag]
</span><a href="#local-6989586621680807269"><span class="hs-identifier hs-var">bndrs</span></a></span><span>
</span><span id="line-677"></span><span>
</span><span id="line-678"></span><span id="local-6989586621680808059"><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807262"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808059"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808059"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#ArgFlag"><span class="hs-identifier hs-type">ArgFlag</span></a></span><span class="hs-special">)</span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-679"></span><span>  </span><span id="local-6989586621680807258"><span class="annot"><span class="annottext">ppr :: VarBndr tv ArgFlag -&gt; SDoc
</span><a href="#local-6989586621680807258"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807257"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807257"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Required"><span class="hs-identifier hs-var">Required</span></a></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">tv -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807257"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-680"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807256"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807256"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Specified"><span class="hs-identifier hs-var">Specified</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Char -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#char"><span class="hs-identifier hs-var">char</span></a></span><span> </span><span class="annot"><span class="annottext">Char
</span><span class="hs-char">'@'</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">tv -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807256"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-681"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807254"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807254"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="annot"><span class="annottext">ArgFlag
</span><a href="GHC.Types.Var.html#Inferred"><span class="hs-identifier hs-var">Inferred</span></a></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#braces"><span class="hs-identifier hs-var">braces</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">tv -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807254"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-682"></span><span>
</span><span id="line-683"></span><span id="local-6989586621680808058"><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807250"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808058"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808058"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Specificity"><span class="hs-identifier hs-type">Specificity</span></a></span><span class="hs-special">)</span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-684"></span><span>  </span><span id="local-6989586621680807248"><span class="annot"><span class="annottext">ppr :: VarBndr tv Specificity -&gt; SDoc
</span><a href="#local-6989586621680807248"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">VarBndr tv ArgFlag -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">(VarBndr tv ArgFlag -&gt; SDoc)
-&gt; (VarBndr tv Specificity -&gt; VarBndr tv ArgFlag)
-&gt; VarBndr tv Specificity
-&gt; SDoc
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">VarBndr tv Specificity -&gt; VarBndr tv ArgFlag
forall a. VarBndr a Specificity -&gt; VarBndr a ArgFlag
</span><a href="GHC.Types.Var.html#tyVarSpecToBinder"><span class="hs-identifier hs-var">tyVarSpecToBinder</span></a></span></span><span>
</span><span id="line-685"></span><span>
</span><span id="line-686"></span><span id="local-6989586621680808056"><span id="local-6989586621680808057"><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807245"><span class="hs-special">(</span><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808057"><span class="hs-identifier hs-type">tv</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808056"><span class="hs-identifier hs-type">vis</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808057"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808056"><span class="hs-identifier hs-type">vis</span></a></span><span class="hs-special">)</span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-687"></span><span>  </span><span id="local-6989586621680807240"><span class="annot"><span class="annottext">put_ :: BinHandle -&gt; VarBndr tv vis -&gt; IO ()
</span><a href="#local-6989586621680807240"><span class="hs-identifier hs-var hs-var hs-var hs-var">put_</span></a></span></span><span> </span><span id="local-6989586621680807239"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807239"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807238"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807238"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span id="local-6989586621680807237"><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807237"><span class="hs-identifier hs-var">vis</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; tv -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807239"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807238"><span class="hs-identifier hs-var">tv</span></a></span><span class="hs-special">;</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; vis -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807239"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807237"><span class="hs-identifier hs-var">vis</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-688"></span><span>
</span><span id="line-689"></span><span>  </span><span id="local-6989586621680807231"><span class="annot"><span class="annottext">get :: BinHandle -&gt; IO (VarBndr tv vis)
</span><a href="#local-6989586621680807231"><span class="hs-identifier hs-var hs-var hs-var hs-var">get</span></a></span></span><span> </span><span id="local-6989586621680807230"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807230"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621680807229"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807229"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO tv
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807230"><span class="hs-identifier hs-var">bh</span></a></span><span class="hs-special">;</span><span> </span><span id="local-6989586621680807228"><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807228"><span class="hs-identifier hs-var">vis</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO vis
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621680807230"><span class="hs-identifier hs-var">bh</span></a></span><span class="hs-special">;</span><span> </span><span class="annot"><span class="annottext">VarBndr tv vis -&gt; IO (VarBndr tv vis)
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">tv -&gt; vis -&gt; VarBndr tv vis
forall var argf. var -&gt; argf -&gt; VarBndr var argf
</span><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-var">Bndr</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807229"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="annot"><span class="annottext">vis
</span><a href="#local-6989586621680807228"><span class="hs-identifier hs-var">vis</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">}</span></span></span><span>
</span><span id="line-690"></span><span>
</span><span id="line-691"></span><span id="local-6989586621680808054"><span id="local-6989586621680808055"><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680807226"><span class="annot"><a href="GHC.Types.Name.html#NamedThing"><span class="hs-identifier hs-type">NamedThing</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808055"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#NamedThing"><span class="hs-identifier hs-type">NamedThing</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#VarBndr"><span class="hs-identifier hs-type">VarBndr</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808055"><span class="hs-identifier hs-type">tv</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680808054"><span class="hs-identifier hs-type">flag</span></a></span><span class="hs-special">)</span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-692"></span><span>  </span><span id="local-6989586621680807223"><span class="annot"><span class="annottext">getName :: VarBndr tv flag -&gt; Name
</span><a href="#local-6989586621680807223"><span class="hs-identifier hs-var hs-var hs-var hs-var">getName</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Bndr"><span class="hs-identifier hs-type">Bndr</span></a></span><span> </span><span id="local-6989586621680807222"><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807222"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span class="annot"><span class="annottext">flag
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">tv -&gt; Name
forall a. NamedThing a =&gt; a -&gt; Name
</span><a href="GHC.Types.Name.html#getName"><span class="hs-identifier hs-var">getName</span></a></span><span> </span><span class="annot"><span class="annottext">tv
</span><a href="#local-6989586621680807222"><span class="hs-identifier hs-var">tv</span></a></span></span></span><span>
</span><span id="line-693"></span><span>
</span><span id="line-694"></span><span class="hs-comment">{-
************************************************************************
*                                                                      *
*                 Type and kind variables                              *
*                                                                      *
************************************************************************
-}</span><span>
</span><span id="line-701"></span><span>
</span><span id="line-702"></span><span class="annot"><a href="GHC.Types.Var.html#tyVarName"><span class="hs-identifier hs-type">tyVarName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span>
</span><span id="line-703"></span><span id="tyVarName"><span class="annot"><span class="annottext">tyVarName :: Var -&gt; Name
</span><a href="GHC.Types.Var.html#tyVarName"><span class="hs-identifier hs-var hs-var">tyVarName</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var hs-var">varName</span></a></span><span>
</span><span id="line-704"></span><span>
</span><span id="line-705"></span><span class="annot"><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier hs-type">tyVarKind</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span>
</span><span id="line-706"></span><span id="tyVarKind"><span class="annot"><span class="annottext">tyVarKind :: Var -&gt; Mult
</span><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier hs-var hs-var">tyVarKind</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var hs-var">varType</span></a></span><span>
</span><span id="line-707"></span><span>
</span><span id="line-708"></span><span class="annot"><a href="GHC.Types.Var.html#setTyVarUnique"><span class="hs-identifier hs-type">setTyVarUnique</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-709"></span><span id="setTyVarUnique"><span class="annot"><span class="annottext">setTyVarUnique :: Var -&gt; Unique -&gt; Var
</span><a href="GHC.Types.Var.html#setTyVarUnique"><span class="hs-identifier hs-var hs-var">setTyVarUnique</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Unique -&gt; Var
</span><a href="GHC.Types.Var.html#setVarUnique"><span class="hs-identifier hs-var">setVarUnique</span></a></span><span>
</span><span id="line-710"></span><span>
</span><span id="line-711"></span><span class="annot"><a href="GHC.Types.Var.html#setTyVarName"><span class="hs-identifier hs-type">setTyVarName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-712"></span><span id="setTyVarName"><span class="annot"><span class="annottext">setTyVarName :: Var -&gt; Name -&gt; Var
</span><a href="GHC.Types.Var.html#setTyVarName"><span class="hs-identifier hs-var hs-var">setTyVarName</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Name -&gt; Var
</span><a href="GHC.Types.Var.html#setVarName"><span class="hs-identifier hs-var">setVarName</span></a></span><span>
</span><span id="line-713"></span><span>
</span><span id="line-714"></span><span class="annot"><a href="GHC.Types.Var.html#setTyVarKind"><span class="hs-identifier hs-type">setTyVarKind</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-715"></span><span id="setTyVarKind"><span class="annot"><span class="annottext">setTyVarKind :: Var -&gt; Mult -&gt; Var
</span><a href="GHC.Types.Var.html#setTyVarKind"><span class="hs-identifier hs-var hs-var">setTyVarKind</span></a></span></span><span> </span><span id="local-6989586621680807221"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807221"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span id="local-6989586621680807220"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807220"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807221"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807220"><span class="hs-identifier hs-var">k</span></a></span><span class="hs-special">}</span><span>
</span><span id="line-716"></span><span>
</span><span id="line-717"></span><span class="annot"><a href="GHC.Types.Var.html#updateTyVarKind"><span class="hs-identifier hs-type">updateTyVarKind</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-718"></span><span id="updateTyVarKind"><span class="annot"><span class="annottext">updateTyVarKind :: (Mult -&gt; Mult) -&gt; Var -&gt; Var
</span><a href="GHC.Types.Var.html#updateTyVarKind"><span class="hs-identifier hs-var hs-var">updateTyVarKind</span></a></span></span><span> </span><span id="local-6989586621680807219"><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807219"><span class="hs-identifier hs-var">update</span></a></span></span><span> </span><span id="local-6989586621680807218"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807218"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807218"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807219"><span class="hs-identifier hs-var">update</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier hs-var">tyVarKind</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807218"><span class="hs-identifier hs-var">tv</span></a></span><span class="hs-special">)</span><span class="hs-special">}</span><span>
</span><span id="line-719"></span><span>
</span><span id="line-720"></span><span id="local-6989586621680807217"><span class="annot"><a href="GHC.Types.Var.html#updateTyVarKindM"><span class="hs-identifier hs-type">updateTyVarKindM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.Base.html#Monad"><span class="hs-identifier hs-type">Monad</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680807217"><span class="hs-identifier hs-type">m</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680807217"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680807217"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span></span><span>
</span><span id="line-721"></span><span id="updateTyVarKindM"><span class="annot"><span class="annottext">updateTyVarKindM :: forall (m :: * -&gt; *). Monad m =&gt; (Mult -&gt; m Mult) -&gt; Var -&gt; m Var
</span><a href="GHC.Types.Var.html#updateTyVarKindM"><span class="hs-identifier hs-var hs-var">updateTyVarKindM</span></a></span></span><span> </span><span id="local-6989586621680807213"><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807213"><span class="hs-identifier hs-var">update</span></a></span></span><span> </span><span id="local-6989586621680807212"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807212"><span class="hs-identifier hs-var">tv</span></a></span></span><span>
</span><span id="line-722"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621680807211"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807211"><span class="hs-identifier hs-var">k'</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807213"><span class="hs-identifier hs-var">update</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier hs-var">tyVarKind</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807212"><span class="hs-identifier hs-var">tv</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-723"></span><span>       </span><span class="hs-special">;</span><span> </span><span class="annot"><span class="annottext">Var -&gt; m Var
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Var -&gt; m Var) -&gt; Var -&gt; m Var
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807212"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="hs-special">{</span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807211"><span class="hs-identifier hs-var">k'</span></a></span><span class="hs-special">}</span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-724"></span><span>
</span><span id="line-725"></span><span class="annot"><a href="GHC.Types.Var.html#mkTyVar"><span class="hs-identifier hs-type">mkTyVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-726"></span><span id="mkTyVar"><span class="annot"><span class="annottext">mkTyVar :: Name -&gt; Mult -&gt; Var
</span><a href="GHC.Types.Var.html#mkTyVar"><span class="hs-identifier hs-var hs-var">mkTyVar</span></a></span></span><span> </span><span id="local-6989586621680807210"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807210"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680807209"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807209"><span class="hs-identifier hs-var">kind</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TyVar :: Name -&gt; Int -&gt; Mult -&gt; Var
</span><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varName :: Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807210"><span class="hs-identifier hs-var">name</span></a></span><span>
</span><span id="line-727"></span><span>                          </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">realUnique :: Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Int
</span><a href="GHC.Types.Unique.html#getKey"><span class="hs-identifier hs-var">getKey</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name -&gt; Unique
</span><a href="GHC.Types.Name.html#nameUnique"><span class="hs-identifier hs-var">nameUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807210"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-728"></span><span>                          </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807209"><span class="hs-identifier hs-var">kind</span></a></span><span>
</span><span id="line-729"></span><span>                          </span><span class="hs-special">}</span><span>
</span><span id="line-730"></span><span>
</span><span id="line-731"></span><span class="annot"><a href="GHC.Types.Var.html#mkTcTyVar"><span class="hs-identifier hs-type">mkTcTyVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Kind"><span class="hs-identifier hs-type">Kind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcTyVarDetails"><span class="hs-identifier hs-type">TcTyVarDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-732"></span><span id="mkTcTyVar"><span class="annot"><span class="annottext">mkTcTyVar :: Name -&gt; Mult -&gt; TcTyVarDetails -&gt; Var
</span><a href="GHC.Types.Var.html#mkTcTyVar"><span class="hs-identifier hs-var hs-var">mkTcTyVar</span></a></span></span><span> </span><span id="local-6989586621680807207"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807207"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680807206"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807206"><span class="hs-identifier hs-var">kind</span></a></span></span><span> </span><span id="local-6989586621680807205"><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807205"><span class="hs-identifier hs-var">details</span></a></span></span><span>
</span><span id="line-733"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-comment">-- NB: 'kind' may be a coercion kind; cf, 'GHC.Tc.Utils.TcMType.newMetaCoVar'</span><span>
</span><span id="line-734"></span><span>    </span><span class="annot"><span class="annottext">TcTyVar :: Name -&gt; Int -&gt; Mult -&gt; TcTyVarDetails -&gt; Var
</span><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-type">TcTyVar</span></a></span><span> </span><span class="hs-special">{</span><span>   </span><span class="annot"><span class="annottext">varName :: Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807207"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-735"></span><span>                </span><span class="annot"><span class="annottext">realUnique :: Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Int
</span><a href="GHC.Types.Unique.html#getKey"><span class="hs-identifier hs-var">getKey</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name -&gt; Unique
</span><a href="GHC.Types.Name.html#nameUnique"><span class="hs-identifier hs-var">nameUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807207"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-736"></span><span>                </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807206"><span class="hs-identifier hs-var">kind</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-737"></span><span>                </span><span class="annot"><span class="annottext">tc_tv_details :: TcTyVarDetails
</span><a href="GHC.Types.Var.html#tc_tv_details"><span class="hs-identifier hs-var">tc_tv_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807205"><span class="hs-identifier hs-var">details</span></a></span><span>
</span><span id="line-738"></span><span>        </span><span class="hs-special">}</span><span>
</span><span id="line-739"></span><span>
</span><span id="line-740"></span><span class="annot"><a href="GHC.Types.Var.html#tcTyVarDetails"><span class="hs-identifier hs-type">tcTyVarDetails</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcTyVarDetails"><span class="hs-identifier hs-type">TcTyVarDetails</span></a></span><span>
</span><span id="line-741"></span><span class="hs-comment">-- See Note [TcTyVars in the typechecker] in GHC.Tc.Utils.TcType</span><span>
</span><span id="line-742"></span><span id="tcTyVarDetails"><span class="annot"><span class="annottext">tcTyVarDetails :: Var -&gt; TcTyVarDetails
</span><a href="GHC.Types.Var.html#tcTyVarDetails"><span class="hs-identifier hs-var hs-var">tcTyVarDetails</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-type">TcTyVar</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">tc_tv_details :: Var -&gt; TcTyVarDetails
</span><a href="GHC.Types.Var.html#tc_tv_details"><span class="hs-identifier hs-var">tc_tv_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807204"><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807204"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807204"><span class="hs-identifier hs-var">details</span></a></span><span>
</span><span id="line-743"></span><span class="annot"><a href="GHC.Types.Var.html#tcTyVarDetails"><span class="hs-identifier hs-var">tcTyVarDetails</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>                            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="GHC.Tc.Utils.TcType.html#vanillaSkolemTv"><span class="hs-identifier hs-var">vanillaSkolemTv</span></a></span><span>
</span><span id="line-744"></span><span class="annot"><a href="GHC.Types.Var.html#tcTyVarDetails"><span class="hs-identifier hs-var">tcTyVarDetails</span></a></span><span> </span><span id="local-6989586621680807203"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807203"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; TcTyVarDetails
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;tcTyVarDetails&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807203"><span class="hs-identifier hs-var">var</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#dcolon"><span class="hs-identifier hs-var">dcolon</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; SDoc
</span><a href="GHC.Core.TyCo.Ppr.html#pprKind"><span class="hs-identifier hs-var">pprKind</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#tyVarKind"><span class="hs-identifier hs-var">tyVarKind</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807203"><span class="hs-identifier hs-var">var</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-745"></span><span>
</span><span id="line-746"></span><span class="annot"><a href="GHC.Types.Var.html#setTcTyVarDetails"><span class="hs-identifier hs-type">setTcTyVarDetails</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcTyVarDetails"><span class="hs-identifier hs-type">TcTyVarDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>
</span><span id="line-747"></span><span id="setTcTyVarDetails"><span class="annot"><span class="annottext">setTcTyVarDetails :: Var -&gt; TcTyVarDetails -&gt; Var
</span><a href="GHC.Types.Var.html#setTcTyVarDetails"><span class="hs-identifier hs-var hs-var">setTcTyVarDetails</span></a></span></span><span> </span><span id="local-6989586621680807201"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807201"><span class="hs-identifier hs-var">tv</span></a></span></span><span> </span><span id="local-6989586621680807200"><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807200"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807201"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">tc_tv_details :: TcTyVarDetails
</span><a href="GHC.Types.Var.html#tc_tv_details"><span class="hs-identifier hs-var">tc_tv_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcTyVarDetails
</span><a href="#local-6989586621680807200"><span class="hs-identifier hs-var">details</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-748"></span><span>
</span><span id="line-749"></span><span class="hs-comment">{-
%************************************************************************
%*                                                                      *
\subsection{Ids}
*                                                                      *
************************************************************************
-}</span><span>
</span><span id="line-756"></span><span>
</span><span id="line-757"></span><span class="annot"><a href="GHC.Types.Var.html#idInfo"><span class="hs-identifier hs-type">idInfo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Misc.html#HasDebugCallStack"><span class="hs-identifier hs-type">HasDebugCallStack</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span>
</span><span id="line-758"></span><span id="idInfo"><span class="annot"><span class="annottext">idInfo :: HasDebugCallStack =&gt; Var -&gt; IdInfo
</span><a href="GHC.Types.Var.html#idInfo"><span class="hs-identifier hs-var hs-var">idInfo</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_info :: Var -&gt; IdInfo
</span><a href="GHC.Types.Var.html#id_info"><span class="hs-identifier hs-var">id_info</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807195"><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807195"><span class="hs-identifier hs-var">info</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807195"><span class="hs-identifier hs-var">info</span></a></span><span>
</span><span id="line-759"></span><span class="annot"><a href="GHC.Types.Var.html#idInfo"><span class="hs-identifier hs-var">idInfo</span></a></span><span> </span><span id="local-6989586621680807194"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807194"><span class="hs-identifier hs-var">other</span></a></span></span><span>                   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; IdInfo
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;idInfo&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807194"><span class="hs-identifier hs-var">other</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-760"></span><span>
</span><span id="line-761"></span><span class="annot"><a href="GHC.Types.Var.html#idDetails"><span class="hs-identifier hs-type">idDetails</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span>
</span><span id="line-762"></span><span id="idDetails"><span class="annot"><span class="annottext">idDetails :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#idDetails"><span class="hs-identifier hs-var hs-var">idDetails</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_details :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807193"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807193"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807193"><span class="hs-identifier hs-var">details</span></a></span><span>
</span><span id="line-763"></span><span class="annot"><a href="GHC.Types.Var.html#idDetails"><span class="hs-identifier hs-var">idDetails</span></a></span><span> </span><span id="local-6989586621680807192"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807192"><span class="hs-identifier hs-var">other</span></a></span></span><span>                         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; IdDetails
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;idDetails&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807192"><span class="hs-identifier hs-var">other</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-764"></span><span>
</span><span id="line-765"></span><span class="hs-comment">-- The next three have a 'Var' suffix even though they always build</span><span>
</span><span id="line-766"></span><span class="hs-comment">-- Ids, because &quot;GHC.Types.Id&quot; uses 'mkGlobalId' etc with different types</span><span>
</span><span id="line-767"></span><span class="annot"><a href="GHC.Types.Var.html#mkGlobalVar"><span class="hs-identifier hs-type">mkGlobalVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-768"></span><span id="mkGlobalVar"><span class="annot"><span class="annottext">mkGlobalVar :: IdDetails -&gt; Name -&gt; Mult -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mkGlobalVar"><span class="hs-identifier hs-var hs-var">mkGlobalVar</span></a></span></span><span> </span><span id="local-6989586621680807191"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807191"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span id="local-6989586621680807190"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807190"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680807189"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807189"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span id="local-6989586621680807188"><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807188"><span class="hs-identifier hs-var">info</span></a></span></span><span>
</span><span id="line-769"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name -&gt; Mult -&gt; Mult -&gt; IdScope -&gt; IdDetails -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mk_id"><span class="hs-identifier hs-var">mk_id</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807190"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="GHC.Builtin.Types.html#manyDataConTy"><span class="hs-identifier hs-var">manyDataConTy</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807189"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807191"><span class="hs-identifier hs-var">details</span></a></span><span> </span><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807188"><span class="hs-identifier hs-var">info</span></a></span><span>
</span><span id="line-770"></span><span>  </span><span class="hs-comment">-- There is no support for linear global variables yet. They would require</span><span>
</span><span id="line-771"></span><span>  </span><span class="hs-comment">-- being checked at link-time, which can be useful, but is not a priority.</span><span>
</span><span id="line-772"></span><span>
</span><span id="line-773"></span><span class="annot"><a href="GHC.Types.Var.html#mkLocalVar"><span class="hs-identifier hs-type">mkLocalVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Mult"><span class="hs-identifier hs-type">Mult</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-774"></span><span id="mkLocalVar"><span class="annot"><span class="annottext">mkLocalVar :: IdDetails -&gt; Name -&gt; Mult -&gt; Mult -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mkLocalVar"><span class="hs-identifier hs-var hs-var">mkLocalVar</span></a></span></span><span> </span><span id="local-6989586621680807186"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807186"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span id="local-6989586621680807185"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807185"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680807184"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807184"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span id="local-6989586621680807183"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807183"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span id="local-6989586621680807182"><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807182"><span class="hs-identifier hs-var">info</span></a></span></span><span>
</span><span id="line-775"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name -&gt; Mult -&gt; Mult -&gt; IdScope -&gt; IdDetails -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mk_id"><span class="hs-identifier hs-var">mk_id</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807185"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807184"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807183"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ExportFlag -&gt; IdScope
</span><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-var">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#NotExported"><span class="hs-identifier hs-var">NotExported</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807186"><span class="hs-identifier hs-var">details</span></a></span><span>  </span><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807182"><span class="hs-identifier hs-var">info</span></a></span><span>
</span><span id="line-776"></span><span>
</span><span id="line-777"></span><span class="annot"><a href="GHC.Types.Var.html#mkCoVar"><span class="hs-identifier hs-type">mkCoVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#CoVar"><span class="hs-identifier hs-type">CoVar</span></a></span><span>
</span><span id="line-778"></span><span class="hs-comment">-- Coercion variables have no IdInfo</span><span>
</span><span id="line-779"></span><span id="mkCoVar"><span class="annot"><span class="annottext">mkCoVar :: Name -&gt; Mult -&gt; Var
</span><a href="GHC.Types.Var.html#mkCoVar"><span class="hs-identifier hs-var hs-var">mkCoVar</span></a></span></span><span> </span><span id="local-6989586621680807181"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807181"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680807180"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807180"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name -&gt; Mult -&gt; Mult -&gt; IdScope -&gt; IdDetails -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mk_id"><span class="hs-identifier hs-var">mk_id</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807181"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="GHC.Builtin.Types.html#manyDataConTy"><span class="hs-identifier hs-var">manyDataConTy</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807180"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ExportFlag -&gt; IdScope
</span><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-var">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#NotExported"><span class="hs-identifier hs-var">NotExported</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="GHC.Types.Id.Info.html#coVarDetails"><span class="hs-identifier hs-var">coVarDetails</span></a></span><span> </span><span class="annot"><span class="annottext">IdInfo
</span><a href="GHC.Types.Id.Info.html#vanillaIdInfo"><span class="hs-identifier hs-var">vanillaIdInfo</span></a></span><span>
</span><span id="line-780"></span><span>
</span><span id="line-781"></span><span class="hs-comment">-- | Exported 'Var's will not be removed as dead code</span><span>
</span><span id="line-782"></span><span class="annot"><a href="GHC.Types.Var.html#mkExportedLocalVar"><span class="hs-identifier hs-type">mkExportedLocalVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-783"></span><span id="mkExportedLocalVar"><span class="annot"><span class="annottext">mkExportedLocalVar :: IdDetails -&gt; Name -&gt; Mult -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mkExportedLocalVar"><span class="hs-identifier hs-var hs-var">mkExportedLocalVar</span></a></span></span><span> </span><span id="local-6989586621680807179"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807179"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span id="local-6989586621680807178"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807178"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680807177"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807177"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span id="local-6989586621680807176"><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807176"><span class="hs-identifier hs-var">info</span></a></span></span><span>
</span><span id="line-784"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name -&gt; Mult -&gt; Mult -&gt; IdScope -&gt; IdDetails -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mk_id"><span class="hs-identifier hs-var">mk_id</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807178"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="GHC.Builtin.Types.html#manyDataConTy"><span class="hs-identifier hs-var">manyDataConTy</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807177"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ExportFlag -&gt; IdScope
</span><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-var">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#Exported"><span class="hs-identifier hs-var">Exported</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807179"><span class="hs-identifier hs-var">details</span></a></span><span> </span><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807176"><span class="hs-identifier hs-var">info</span></a></span><span>
</span><span id="line-785"></span><span>  </span><span class="hs-comment">-- There is no support for exporting linear variables. See also [mkGlobalVar]</span><span>
</span><span id="line-786"></span><span>
</span><span id="line-787"></span><span class="annot"><a href="GHC.Types.Var.html#mk_id"><span class="hs-identifier hs-type">mk_id</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Mult"><span class="hs-identifier hs-type">Mult</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#IdScope"><span class="hs-identifier hs-type">IdScope</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-788"></span><span id="mk_id"><span class="annot"><span class="annottext">mk_id :: Name -&gt; Mult -&gt; Mult -&gt; IdScope -&gt; IdDetails -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#mk_id"><span class="hs-identifier hs-var hs-var">mk_id</span></a></span></span><span> </span><span id="local-6989586621680807175"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807175"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621680807174"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807174"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span id="local-6989586621680807173"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807173"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span id="local-6989586621680807172"><span class="annot"><span class="annottext">IdScope
</span><a href="#local-6989586621680807172"><span class="hs-identifier hs-var">scope</span></a></span></span><span> </span><span id="local-6989586621680807171"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807171"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span id="local-6989586621680807170"><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807170"><span class="hs-identifier hs-var">info</span></a></span></span><span>
</span><span id="line-789"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id :: Name
-&gt; Int -&gt; Mult -&gt; Mult -&gt; IdScope -&gt; IdDetails -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varName :: Name
</span><a href="GHC.Types.Var.html#varName"><span class="hs-identifier hs-var">varName</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807175"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-790"></span><span>         </span><span class="annot"><span class="annottext">realUnique :: Int
</span><a href="GHC.Types.Var.html#realUnique"><span class="hs-identifier hs-var">realUnique</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Int
</span><a href="GHC.Types.Unique.html#getKey"><span class="hs-identifier hs-var">getKey</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name -&gt; Unique
</span><a href="GHC.Types.Name.html#nameUnique"><span class="hs-identifier hs-var">nameUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680807175"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-791"></span><span>         </span><span class="annot"><span class="annottext">varMult :: Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807174"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-792"></span><span>         </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807173"><span class="hs-identifier hs-var">ty</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-793"></span><span>         </span><span class="annot"><span class="annottext">idScope :: IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="#local-6989586621680807172"><span class="hs-identifier hs-var">scope</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-794"></span><span>         </span><span class="annot"><span class="annottext">id_details :: IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807171"><span class="hs-identifier hs-var">details</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-795"></span><span>         </span><span class="annot"><span class="annottext">id_info :: IdInfo
</span><a href="GHC.Types.Var.html#id_info"><span class="hs-identifier hs-var">id_info</span></a></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807170"><span class="hs-identifier hs-var">info</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-796"></span><span>
</span><span id="line-797"></span><span class="hs-comment">-------------------</span><span>
</span><span id="line-798"></span><span class="annot"><a href="GHC.Types.Var.html#lazySetIdInfo"><span class="hs-identifier hs-type">lazySetIdInfo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdInfo"><span class="hs-identifier hs-type">IdInfo</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span>
</span><span id="line-799"></span><span id="lazySetIdInfo"><span class="annot"><span class="annottext">lazySetIdInfo :: Var -&gt; IdInfo -&gt; Var
</span><a href="GHC.Types.Var.html#lazySetIdInfo"><span class="hs-identifier hs-var hs-var">lazySetIdInfo</span></a></span></span><span> </span><span id="local-6989586621680807169"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807169"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621680807168"><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807168"><span class="hs-identifier hs-var">info</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807169"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_info :: IdInfo
</span><a href="GHC.Types.Var.html#id_info"><span class="hs-identifier hs-var">id_info</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdInfo
</span><a href="#local-6989586621680807168"><span class="hs-identifier hs-var">info</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-800"></span><span>
</span><span id="line-801"></span><span class="annot"><a href="GHC.Types.Var.html#setIdDetails"><span class="hs-identifier hs-type">setIdDetails</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Id.Info.html#IdDetails"><span class="hs-identifier hs-type">IdDetails</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-802"></span><span id="setIdDetails"><span class="annot"><span class="annottext">setIdDetails :: Var -&gt; IdDetails -&gt; Var
</span><a href="GHC.Types.Var.html#setIdDetails"><span class="hs-identifier hs-var hs-var">setIdDetails</span></a></span></span><span> </span><span id="local-6989586621680807167"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807167"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621680807166"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807166"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807167"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_details :: IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807166"><span class="hs-identifier hs-var">details</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-803"></span><span>
</span><span id="line-804"></span><span class="annot"><a href="GHC.Types.Var.html#globaliseId"><span class="hs-identifier hs-type">globaliseId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-805"></span><span class="hs-comment">-- ^ If it's a local, make it global</span><span>
</span><span id="line-806"></span><span id="globaliseId"><span class="annot"><span class="annottext">globaliseId :: Var -&gt; Var
</span><a href="GHC.Types.Var.html#globaliseId"><span class="hs-identifier hs-var hs-var">globaliseId</span></a></span></span><span> </span><span id="local-6989586621680807165"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807165"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807165"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-807"></span><span>
</span><span id="line-808"></span><span class="annot"><a href="GHC.Types.Var.html#setIdExported"><span class="hs-identifier hs-type">setIdExported</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-809"></span><span class="hs-comment">-- ^ Exports the given local 'Id'. Can also be called on global 'Id's, such as data constructors</span><span>
</span><span id="line-810"></span><span class="hs-comment">-- and class operations, which are born as global 'Id's and automatically exported</span><span>
</span><span id="line-811"></span><span id="setIdExported"><span class="annot"><span class="annottext">setIdExported :: Var -&gt; Var
</span><a href="GHC.Types.Var.html#setIdExported"><span class="hs-identifier hs-var hs-var">setIdExported</span></a></span></span><span> </span><span id="local-6989586621680807164"><span class="annot"><span class="annottext">id :: Var
</span><a href="#local-6989586621680807164"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-type">LocalId</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807164"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ExportFlag -&gt; IdScope
</span><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-var">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#Exported"><span class="hs-identifier hs-var">Exported</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-812"></span><span class="annot"><a href="GHC.Types.Var.html#setIdExported"><span class="hs-identifier hs-var">setIdExported</span></a></span><span> </span><span id="local-6989586621680807163"><span class="annot"><span class="annottext">id :: Var
</span><a href="#local-6989586621680807163"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807163"><span class="hs-identifier hs-var">id</span></a></span><span>
</span><span id="line-813"></span><span class="annot"><a href="GHC.Types.Var.html#setIdExported"><span class="hs-identifier hs-var">setIdExported</span></a></span><span> </span><span id="local-6989586621680807162"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807162"><span class="hs-identifier hs-var">tv</span></a></span></span><span>                               </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; Var
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;setIdExported&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807162"><span class="hs-identifier hs-var">tv</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-814"></span><span>
</span><span id="line-815"></span><span class="annot"><a href="GHC.Types.Var.html#setIdNotExported"><span class="hs-identifier hs-type">setIdNotExported</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-816"></span><span class="hs-comment">-- ^ We can only do this to LocalIds</span><span>
</span><span id="line-817"></span><span id="setIdNotExported"><span class="annot"><span class="annottext">setIdNotExported :: Var -&gt; Var
</span><a href="GHC.Types.Var.html#setIdNotExported"><span class="hs-identifier hs-var hs-var">setIdNotExported</span></a></span></span><span> </span><span id="local-6989586621680807161"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807161"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier">ASSERT</span><span class="hs-special">(</span><span> </span><span class="hs-identifier">isLocalId</span><span> </span><span class="hs-identifier">id</span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-818"></span><span>                      </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807161"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ExportFlag -&gt; IdScope
</span><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-var">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#NotExported"><span class="hs-identifier hs-var">NotExported</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-819"></span><span>
</span><span id="line-820"></span><span class="hs-comment">-----------------------</span><span>
</span><span id="line-821"></span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeButNotMult"><span class="hs-identifier hs-type">updateIdTypeButNotMult</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-822"></span><span id="updateIdTypeButNotMult"><span class="annot"><span class="annottext">updateIdTypeButNotMult :: (Mult -&gt; Mult) -&gt; Var -&gt; Var
</span><a href="GHC.Types.Var.html#updateIdTypeButNotMult"><span class="hs-identifier hs-var hs-var">updateIdTypeButNotMult</span></a></span></span><span> </span><span id="local-6989586621680807160"><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807160"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621680807159"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807159"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807159"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807160"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var hs-var">varType</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807159"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-823"></span><span>
</span><span id="line-824"></span><span>
</span><span id="line-825"></span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeAndMult"><span class="hs-identifier hs-type">updateIdTypeAndMult</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-826"></span><span id="updateIdTypeAndMult"><span class="annot"><span class="annottext">updateIdTypeAndMult :: (Mult -&gt; Mult) -&gt; Var -&gt; Var
</span><a href="GHC.Types.Var.html#updateIdTypeAndMult"><span class="hs-identifier hs-var hs-var">updateIdTypeAndMult</span></a></span></span><span> </span><span id="local-6989586621680807158"><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807158"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621680807157"><span class="annot"><span class="annottext">id :: Var
</span><a href="#local-6989586621680807157"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807156"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807156"><span class="hs-identifier hs-var">ty</span></a></span></span><span>
</span><span id="line-827"></span><span>                             </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">varMult :: Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807155"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807155"><span class="hs-identifier hs-var">mult</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-828"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807157"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807154"><span class="hs-identifier hs-var">ty'</span></a></span><span>
</span><span id="line-829"></span><span>       </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">varMult :: Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807153"><span class="hs-identifier hs-var">mult'</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-830"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-831"></span><span>    </span><span class="hs-glyph">!</span><span id="local-6989586621680807154"><span class="annot"><span class="annottext">ty' :: Mult
</span><a href="#local-6989586621680807154"><span class="hs-identifier hs-var hs-var">ty'</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807158"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807156"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-832"></span><span>    </span><span class="hs-glyph">!</span><span id="local-6989586621680807153"><span class="annot"><span class="annottext">mult' :: Mult
</span><a href="#local-6989586621680807153"><span class="hs-identifier hs-var hs-var">mult'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><a href="#local-6989586621680807158"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807155"><span class="hs-identifier hs-var">mult</span></a></span><span>
</span><span id="line-833"></span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeAndMult"><span class="hs-identifier hs-var">updateIdTypeAndMult</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Mult
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680807152"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807152"><span class="hs-identifier hs-var">other</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; Var
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;updateIdTypeAndMult&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807152"><span class="hs-identifier hs-var">other</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-834"></span><span>
</span><span id="line-835"></span><span id="local-6989586621680807151"><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeAndMultM"><span class="hs-identifier hs-type">updateIdTypeAndMultM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#Monad"><span class="hs-identifier hs-type">Monad</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680807151"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680807151"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680807151"><span class="hs-identifier hs-type">m</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span></span><span>
</span><span id="line-836"></span><span id="updateIdTypeAndMultM"><span class="annot"><span class="annottext">updateIdTypeAndMultM :: forall (m :: * -&gt; *). Monad m =&gt; (Mult -&gt; m Mult) -&gt; Var -&gt; m Var
</span><a href="GHC.Types.Var.html#updateIdTypeAndMultM"><span class="hs-identifier hs-var hs-var">updateIdTypeAndMultM</span></a></span></span><span> </span><span id="local-6989586621680807143"><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807143"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621680807142"><span class="annot"><span class="annottext">id :: Var
</span><a href="#local-6989586621680807142"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807141"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807141"><span class="hs-identifier hs-var">ty</span></a></span></span><span>
</span><span id="line-837"></span><span>                              </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">varMult :: Var -&gt; Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807140"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807140"><span class="hs-identifier hs-var">mult</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-838"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-special">{</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621680807139"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807139"><span class="hs-identifier hs-var">ty'</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807143"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807141"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-839"></span><span>       </span><span class="hs-special">;</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621680807138"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807138"><span class="hs-identifier hs-var">mult'</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><a href="#local-6989586621680807143"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807140"><span class="hs-identifier hs-var">mult</span></a></span><span>
</span><span id="line-840"></span><span>       </span><span class="hs-special">;</span><span> </span><span class="annot"><span class="annottext">Var -&gt; m Var
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807142"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varType :: Mult
</span><a href="GHC.Types.Var.html#varType"><span class="hs-identifier hs-var">varType</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807139"><span class="hs-identifier hs-var">ty'</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">varMult :: Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807138"><span class="hs-identifier hs-var">mult'</span></a></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-841"></span><span class="annot"><a href="GHC.Types.Var.html#updateIdTypeAndMultM"><span class="hs-identifier hs-var">updateIdTypeAndMultM</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; m Mult
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680807137"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807137"><span class="hs-identifier hs-var">other</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; m Var
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;updateIdTypeAndMultM&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807137"><span class="hs-identifier hs-var">other</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-842"></span><span>
</span><span id="line-843"></span><span class="annot"><a href="GHC.Types.Var.html#setIdMult"><span class="hs-identifier hs-type">setIdMult</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Mult"><span class="hs-identifier hs-type">Mult</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span>
</span><span id="line-844"></span><span id="setIdMult"><span class="annot"><span class="annottext">setIdMult :: Var -&gt; Mult -&gt; Var
</span><a href="GHC.Types.Var.html#setIdMult"><span class="hs-identifier hs-var hs-var">setIdMult</span></a></span></span><span> </span><span id="local-6989586621680807136"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807136"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621680807135"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807135"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isId"><span class="hs-identifier hs-var">isId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807136"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807136"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">varMult :: Mult
</span><a href="GHC.Types.Var.html#varMult"><span class="hs-identifier hs-var">varMult</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807135"><span class="hs-identifier hs-var">r</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-845"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; Var
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;setIdMult&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807136"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680807135"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-846"></span><span>
</span><span id="line-847"></span><span class="hs-comment">{-
************************************************************************
*                                                                      *
\subsection{Predicates over variables}
*                                                                      *
************************************************************************
-}</span><span>
</span><span id="line-854"></span><span>
</span><span id="line-855"></span><span class="hs-comment">-- | Is this a type-level (i.e., computationally irrelevant, thus erasable)</span><span>
</span><span id="line-856"></span><span class="hs-comment">-- variable? Satisfies @isTyVar = not . isId@.</span><span>
</span><span id="line-857"></span><span class="annot"><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier hs-type">isTyVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>        </span><span class="hs-comment">-- True of both TyVar and TcTyVar</span><span>
</span><span id="line-858"></span><span id="isTyVar"><span class="annot"><span class="annottext">isTyVar :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier hs-var hs-var">isTyVar</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-859"></span><span class="annot"><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier hs-var">isTyVar</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-type">TcTyVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-860"></span><span class="annot"><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier hs-var">isTyVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-861"></span><span>
</span><span id="line-862"></span><span class="annot"><a href="GHC.Types.Var.html#isTcTyVar"><span class="hs-identifier hs-type">isTcTyVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>      </span><span class="hs-comment">-- True of TcTyVar only</span><span>
</span><span id="line-863"></span><span id="isTcTyVar"><span class="annot"><span class="annottext">isTcTyVar :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isTcTyVar"><span class="hs-identifier hs-var hs-var">isTcTyVar</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TcTyVar"><span class="hs-identifier hs-type">TcTyVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-864"></span><span class="annot"><a href="GHC.Types.Var.html#isTcTyVar"><span class="hs-identifier hs-var">isTcTyVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-865"></span><span>
</span><span id="line-866"></span><span class="annot"><a href="GHC.Types.Var.html#isTyCoVar"><span class="hs-identifier hs-type">isTyCoVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-867"></span><span id="isTyCoVar"><span class="annot"><span class="annottext">isTyCoVar :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isTyCoVar"><span class="hs-identifier hs-var hs-var">isTyCoVar</span></a></span></span><span> </span><span id="local-6989586621680807134"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807134"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isTyVar"><span class="hs-identifier hs-var">isTyVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807134"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Bool
</span><span class="hs-operator hs-var">||</span></span><span> </span><span class="annot"><span class="annottext">Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isCoVar"><span class="hs-identifier hs-var">isCoVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807134"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-868"></span><span>
</span><span id="line-869"></span><span class="hs-comment">-- | Is this a value-level (i.e., computationally relevant) 'Id'entifier?</span><span>
</span><span id="line-870"></span><span class="hs-comment">-- Satisfies @isId = not . isTyVar@.</span><span>
</span><span id="line-871"></span><span class="annot"><a href="GHC.Types.Var.html#isId"><span class="hs-identifier hs-type">isId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-872"></span><span id="isId"><span class="annot"><span class="annottext">isId :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isId"><span class="hs-identifier hs-var hs-var">isId</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-873"></span><span class="annot"><a href="GHC.Types.Var.html#isId"><span class="hs-identifier hs-var">isId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-874"></span><span>
</span><span id="line-875"></span><span class="hs-comment">-- | Is this a coercion variable?</span><span>
</span><span id="line-876"></span><span class="hs-comment">-- Satisfies @'isId' v ==&gt; 'isCoVar' v == not ('isNonCoVarId' v)@.</span><span>
</span><span id="line-877"></span><span class="annot"><a href="GHC.Types.Var.html#isCoVar"><span class="hs-identifier hs-type">isCoVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-878"></span><span id="isCoVar"><span class="annot"><span class="annottext">isCoVar :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isCoVar"><span class="hs-identifier hs-var hs-var">isCoVar</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_details :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807133"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807133"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdDetails -&gt; Bool
</span><a href="GHC.Types.Id.Info.html#isCoVarDetails"><span class="hs-identifier hs-var">isCoVarDetails</span></a></span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807133"><span class="hs-identifier hs-var">details</span></a></span><span>
</span><span id="line-879"></span><span class="annot"><a href="GHC.Types.Var.html#isCoVar"><span class="hs-identifier hs-var">isCoVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>                             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-880"></span><span>
</span><span id="line-881"></span><span class="hs-comment">-- | Is this a term variable ('Id') that is /not/ a coercion variable?</span><span>
</span><span id="line-882"></span><span class="hs-comment">-- Satisfies @'isId' v ==&gt; 'isCoVar' v == not ('isNonCoVarId' v)@.</span><span>
</span><span id="line-883"></span><span class="annot"><a href="GHC.Types.Var.html#isNonCoVarId"><span class="hs-identifier hs-type">isNonCoVarId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-884"></span><span id="isNonCoVarId"><span class="annot"><span class="annottext">isNonCoVarId :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isNonCoVarId"><span class="hs-identifier hs-var hs-var">isNonCoVarId</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">id_details :: Var -&gt; IdDetails
</span><a href="GHC.Types.Var.html#id_details"><span class="hs-identifier hs-var">id_details</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680807132"><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807132"><span class="hs-identifier hs-var">details</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">IdDetails -&gt; Bool
</span><a href="GHC.Types.Id.Info.html#isCoVarDetails"><span class="hs-identifier hs-var">isCoVarDetails</span></a></span><span> </span><span class="annot"><span class="annottext">IdDetails
</span><a href="#local-6989586621680807132"><span class="hs-identifier hs-var">details</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-885"></span><span class="annot"><a href="GHC.Types.Var.html#isNonCoVarId"><span class="hs-identifier hs-var">isNonCoVarId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>                             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-886"></span><span>
</span><span id="line-887"></span><span class="annot"><a href="GHC.Types.Var.html#isLocalId"><span class="hs-identifier hs-type">isLocalId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-888"></span><span id="isLocalId"><span class="annot"><span class="annottext">isLocalId :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isLocalId"><span class="hs-identifier hs-var hs-var">isLocalId</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-type">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-889"></span><span class="annot"><a href="GHC.Types.Var.html#isLocalId"><span class="hs-identifier hs-var">isLocalId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>                            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-890"></span><span>
</span><span id="line-891"></span><span class="hs-comment">-- | 'isLocalVar' returns @True@ for type variables as well as local 'Id's</span><span>
</span><span id="line-892"></span><span class="hs-comment">-- These are the variables that we need to pay attention to when finding free</span><span>
</span><span id="line-893"></span><span class="hs-comment">-- variables, or doing dependency analysis.</span><span>
</span><span id="line-894"></span><span class="annot"><a href="GHC.Types.Var.html#isLocalVar"><span class="hs-identifier hs-type">isLocalVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-895"></span><span id="isLocalVar"><span class="annot"><span class="annottext">isLocalVar :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isLocalVar"><span class="hs-identifier hs-var hs-var">isLocalVar</span></a></span></span><span> </span><span id="local-6989586621680807131"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807131"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isGlobalId"><span class="hs-identifier hs-var">isGlobalId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807131"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-896"></span><span>
</span><span id="line-897"></span><span class="annot"><a href="GHC.Types.Var.html#isGlobalId"><span class="hs-identifier hs-type">isGlobalId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-898"></span><span id="isGlobalId"><span class="annot"><span class="annottext">isGlobalId :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isGlobalId"><span class="hs-identifier hs-var hs-var">isGlobalId</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-899"></span><span class="annot"><a href="GHC.Types.Var.html#isGlobalId"><span class="hs-identifier hs-var">isGlobalId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span>                           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-900"></span><span>
</span><span id="line-901"></span><span class="hs-comment">-- | 'mustHaveLocalBinding' returns @True@ of 'Id's and 'TyVar's</span><span>
</span><span id="line-902"></span><span class="hs-comment">-- that must have a binding in this module.  The converse</span><span>
</span><span id="line-903"></span><span class="hs-comment">-- is not quite right: there are some global 'Id's that must have</span><span>
</span><span id="line-904"></span><span class="hs-comment">-- bindings, such as record selectors.  But that doesn't matter,</span><span>
</span><span id="line-905"></span><span class="hs-comment">-- because it's only used for assertions</span><span>
</span><span id="line-906"></span><span class="annot"><a href="GHC.Types.Var.html#mustHaveLocalBinding"><span class="hs-identifier hs-type">mustHaveLocalBinding</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-907"></span><span id="mustHaveLocalBinding"><span class="annot"><span class="annottext">mustHaveLocalBinding :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#mustHaveLocalBinding"><span class="hs-identifier hs-var hs-var">mustHaveLocalBinding</span></a></span></span><span> </span><span id="local-6989586621680807130"><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807130"><span class="hs-identifier hs-var">var</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isLocalVar"><span class="hs-identifier hs-var">isLocalVar</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><a href="#local-6989586621680807130"><span class="hs-identifier hs-var">var</span></a></span><span>
</span><span id="line-908"></span><span>
</span><span id="line-909"></span><span class="hs-comment">-- | 'isExportedIdVar' means \&quot;don't throw this away\&quot;</span><span>
</span><span id="line-910"></span><span class="annot"><a href="GHC.Types.Var.html#isExportedId"><span class="hs-identifier hs-type">isExportedId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-911"></span><span id="isExportedId"><span class="annot"><span class="annottext">isExportedId :: Var -&gt; Bool
</span><a href="GHC.Types.Var.html#isExportedId"><span class="hs-identifier hs-var hs-var">isExportedId</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IdScope
</span><a href="GHC.Types.Var.html#GlobalId"><span class="hs-identifier hs-var">GlobalId</span></a></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-912"></span><span class="annot"><a href="GHC.Types.Var.html#isExportedId"><span class="hs-identifier hs-var">isExportedId</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">idScope :: Var -&gt; IdScope
</span><a href="GHC.Types.Var.html#idScope"><span class="hs-identifier hs-var">idScope</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#LocalId"><span class="hs-identifier hs-type">LocalId</span></a></span><span> </span><span class="annot"><span class="annottext">ExportFlag
</span><a href="GHC.Types.Var.html#Exported"><span class="hs-identifier hs-var">Exported</span></a></span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-913"></span><span class="annot"><a href="GHC.Types.Var.html#isExportedId"><span class="hs-identifier hs-var">isExportedId</span></a></span><span> </span><span class="annot"><span class="annottext">Var
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-914"></span></pre></body></html>